This is an automated email from the ASF dual-hosted git repository. kezhenxu94 pushed a commit to branch user_e2e in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
commit 66805d1bcb17f8fe4d2f9f3db09f8ad64f650d7c Author: kezhenxu94 <[email protected]> AuthorDate: Mon Dec 27 20:36:30 2021 +0800 Adjust E2E to make it pass --- .../dolphinscheduler/e2e/cases/TenantE2ETest.java | 9 ++- .../dolphinscheduler/e2e/cases/UserE2ETest.java | 55 ++++++++++++------ .../e2e/pages/security/SecurityPage.java | 2 +- .../e2e/pages/security/TenantPage.java | 8 --- .../e2e/pages/security/UserPage.java | 66 +++++++++++----------- .../pages/security/pages/users/_source/list.vue | 6 +- .../components/secondaryMenu/_source/menu.js | 2 +- 7 files changed, 84 insertions(+), 64 deletions(-) diff --git a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/TenantE2ETest.java b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/TenantE2ETest.java index 4938a8b..e5c4ef5 100644 --- a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/TenantE2ETest.java +++ b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/TenantE2ETest.java @@ -32,6 +32,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.RemoteWebDriver; @DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml") @@ -52,7 +53,13 @@ class TenantE2ETest { @Test @Order(10) void testCreateTenant() { - new TenantPage(browser).create(tenant); + final TenantPage page = new TenantPage(browser); + page.create(tenant); + + await().untilAsserted(() -> assertThat(page.tenantList()) + .as("Tenant list should contain newly-created tenant") + .extracting(WebElement::getText) + .anyMatch(it -> it.contains(tenant))); } @Test diff --git a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/UserE2ETest.java b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/UserE2ETest.java index 5395179..8b43e1b 100644 --- a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/UserE2ETest.java +++ b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/UserE2ETest.java @@ -20,22 +20,23 @@ package org.apache.dolphinscheduler.e2e.cases; +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + import org.apache.dolphinscheduler.e2e.core.DolphinScheduler; import org.apache.dolphinscheduler.e2e.pages.LoginPage; -import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage; import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage; import org.apache.dolphinscheduler.e2e.pages.security.TenantPage; import org.apache.dolphinscheduler.e2e.pages.security.UserPage; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.RemoteWebDriver; -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; - @DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml") class UserE2ETest { private static final String tenant = System.getProperty("user.name"); @@ -49,26 +50,25 @@ class UserE2ETest { private static final String editEmail = "[email protected]"; private static final String editPhone = "15800000001"; - private static RemoteWebDriver browser; @BeforeAll public static void setup() { new LoginPage(browser) - .login("admin","dolphinscheduler123") - .goToNav(SecurityPage.class) - .goToTab(TenantPage.class) - .create(tenant) - .goToNav(SecurityPage.class) - .goToTab(UserPage.class); + .login("admin", "dolphinscheduler123") + .goToNav(SecurityPage.class) + .goToTab(TenantPage.class) + .create(tenant) + .goToNav(SecurityPage.class) + .goToTab(UserPage.class); } @AfterAll public static void cleanup() { - new NavBarPage(browser) - .goToNav(SecurityPage.class) - .goToTab(TenantPage.class) - .delete(tenant); + new SecurityPage(browser) + .goToTab(TenantPage.class) + .delete(tenant) + ; } @Test @@ -77,6 +77,15 @@ class UserE2ETest { final UserPage page = new UserPage(browser); page.create(user, password, email, phone); + + await().untilAsserted(() -> { + browser.navigate().refresh(); + + assertThat(page.userList()) + .as("User list should contain newly-created user") + .extracting(WebElement::getText) + .anyMatch(it -> it.contains(user)); + }); } @Test @@ -98,7 +107,15 @@ class UserE2ETest { @Order(30) void testEditUser() { final UserPage page = new UserPage(browser); - page.editUser(user, editUser, editPassword, editEmail, editPhone); + page.update(user, editUser, editPassword, editEmail, editPhone); + + await().untilAsserted(() -> { + browser.navigate().refresh(); + assertThat(page.userList()) + .as("User list should contain newly-modified User") + .extracting(WebElement::getText) + .anyMatch(it -> it.contains(editUser)); + }); } @@ -106,14 +123,16 @@ class UserE2ETest { @Order(40) void testDeleteUser() { final UserPage page = new UserPage(browser); - page.delete(user); + + page.delete(editUser); await().untilAsserted(() -> { browser.navigate().refresh(); + assertThat( page.userList() ).noneMatch( - it -> it.getText().contains(user) + it -> it.getText().contains(user) || it.getText().contains(editUser) ); }); } diff --git a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/SecurityPage.java b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/SecurityPage.java index 389bd2b..920d171 100644 --- a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/SecurityPage.java +++ b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/SecurityPage.java @@ -33,7 +33,7 @@ public class SecurityPage extends NavBarPage implements NavBarItem { @FindBy(className = "tab-tenant-manage") private WebElement menuTenantManage; - @FindBy(className = "user-manage") + @FindBy(className = "tab-user-manage") private WebElement menUserManage; diff --git a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/TenantPage.java b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/TenantPage.java index 6fc70c6..eba9cce 100644 --- a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/TenantPage.java +++ b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/TenantPage.java @@ -19,9 +19,6 @@ package org.apache.dolphinscheduler.e2e.pages.security; -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; - import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage; import java.util.List; @@ -67,11 +64,6 @@ public final class TenantPage extends NavBarPage implements SecurityPage.Tab { createTenantForm().inputDescription().sendKeys(description); createTenantForm().buttonSubmit().click(); - await().untilAsserted(() -> assertThat(tenantList()) - .as("Tenant list should contain newly-created tenant") - .extracting(WebElement::getText) - .anyMatch(it -> it.contains(tenant))); - return this; } diff --git a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/UserPage.java b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/UserPage.java index 90e7b2d..b602404 100644 --- a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/UserPage.java +++ b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/security/UserPage.java @@ -19,9 +19,6 @@ package org.apache.dolphinscheduler.e2e.pages.security; -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; - import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage; import java.util.List; @@ -40,24 +37,24 @@ public final class UserPage extends NavBarPage implements SecurityPage.Tab { @FindBy(id = "btnCreateUser") private WebElement buttonCreateUser; - @FindBy(className = "rows-user") + @FindBy(className = "items") private List<WebElement> userList; @FindBys({ - @FindBy(className = "el-popconfirm"), - @FindBy(className = "el-button--primary"), + @FindBy(className = "el-popconfirm"), + @FindBy(className = "el-button--primary"), }) - private WebElement buttonConfirm; + private List<WebElement> buttonConfirm; - private UserForm createUserForm = new UserForm(); - private UserForm editUserForm = new UserForm(); + private final UserForm createUserForm = new UserForm(); + private final UserForm editUserForm = new UserForm(); public UserPage(RemoteWebDriver driver) { super(driver); } - public UserPage create(String user, String password, String email, String phone) { + public UserPage create(String user, String password, String email, String phone) { buttonCreateUser().click(); createUserForm().inputUserName().sendKeys(user); @@ -66,43 +63,48 @@ public final class UserPage extends NavBarPage implements SecurityPage.Tab { createUserForm().inputPhone().sendKeys(phone); createUserForm().buttonSubmit().click(); - await().untilAsserted(() -> assertThat(userList()) - .as("User list should contain newly-created User") - .extracting(WebElement::getText) - .anyMatch(it -> it.contains(user))); - return this; } - public UserPage editUser(String user, String editUser, String editPassword, String editEmail, String editPhone) { + public UserPage update(String user, String editUser, String editPassword, String editEmail, String editPhone) { userList() - .stream() - .filter(it -> it.getText().contains(user)) - .findFirst() - .ifPresent(it -> it.findElement(By.className("editUser")).click()); - + .stream() + .filter(it -> it.findElement(By.className("name")).getAttribute("innerHTML").contains(user)) + .flatMap(it -> it.findElements(By.className("edit")).stream()) + .filter(WebElement::isDisplayed) + .findFirst() + .orElseThrow(() -> new RuntimeException("No edit button in user list")) + .click(); + + editUserForm().inputUserName().clear(); editUserForm().inputUserName().sendKeys(editUser); + editUserForm().inputUserPassword().clear(); editUserForm().inputUserPassword().sendKeys(editPassword); + editUserForm().inputEmail().clear(); editUserForm().inputEmail().sendKeys(editEmail); + editUserForm().inputPhone().clear(); editUserForm().inputPhone().sendKeys(editPhone); editUserForm().buttonSubmit().click(); - await().untilAsserted(() -> assertThat(userList()) - .as("User list should contain newly-created User") - .extracting(WebElement::getText) - .anyMatch(it -> it.contains(editUser))); - return this; } public UserPage delete(String user) { userList() - .stream() - .filter(it -> it.getText().contains(user)) - .findFirst() - .ifPresent(it -> it.findElement(By.className("delete")).click()); - - buttonConfirm().click(); + .stream() + .filter(it -> it.findElement(By.className("name")).getAttribute("innerHTML").contains(user)) + .flatMap(it -> it.findElements(By.className("delete")).stream()) + .filter(WebElement::isDisplayed) + .findFirst() + .orElseThrow(() -> new RuntimeException("No delete button in user list")) + .click(); + + buttonConfirm() + .stream() + .filter(WebElement::isDisplayed) + .findFirst() + .orElseThrow(() -> new RuntimeException("No confirm button when deleting")) + .click(); return this; } diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/security/pages/users/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/security/pages/users/_source/list.vue index d640faa..212060b 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/security/pages/users/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/security/pages/users/_source/list.vue @@ -17,9 +17,9 @@ <template> <div class="list-model user-list-model"> <div class="table-box"> - <el-table :data="list" size="mini" style="width: 100%" row-class-name="rows-user"> + <el-table :data="list" size="mini" style="width: 100%" row-class-name="items"> <el-table-column type="index" :label="$t('#')" width="50"></el-table-column> - <el-table-column prop="userName" :label="$t('User Name')"></el-table-column> + <el-table-column prop="userName" :label="$t('User Name')" class-name="name"></el-table-column> <el-table-column :label="$t('User Type')" width="80"> <template slot-scope="scope"> {{scope.row.userType === 'GENERAL_USER' ? `${$t('Ordinary users')}` : `${$t('Administrator')}`}} @@ -62,7 +62,7 @@ </el-dropdown> </el-tooltip> <el-tooltip :content="$t('Edit')" placement="top"> - <el-button type="primary" size="mini" icon="el-icon-edit-outline" @click="_edit(scope.row)" circle class="editUser"></el-button> + <el-button type="primary" size="mini" icon="el-icon-edit-outline" @click="_edit(scope.row)" circle class="edit"></el-button> </el-tooltip> <el-tooltip :content="$t('Delete')" placement="top"> <el-popconfirm diff --git a/dolphinscheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js b/dolphinscheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js index 927f93e..09395ca 100644 --- a/dolphinscheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js +++ b/dolphinscheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js @@ -108,7 +108,7 @@ const menu = { enabled: true, icon: 'el-icon-user-solid', children: [], - classNames: 'user-manage' + classNames: 'tab-user-manage' }, { name: `${i18n.$t('Warning group manage')}`,
