diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java index fb1ab47b74d..b7d6e079245 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/AbstractSchrodingerTest.java @@ -13,7 +13,9 @@ import java.io.InputStream; import java.util.Properties; +import com.codeborne.selenide.Condition; import com.codeborne.selenide.Selenide; +import com.codeborne.selenide.ex.ElementNotFound; import com.codeborne.selenide.testng.BrowserPerClass; import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; @@ -23,6 +25,7 @@ import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; import org.apache.commons.io.FileUtils; +import org.openqa.selenium.By; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.test.context.SpringBootTest; @@ -170,7 +173,19 @@ protected void importObject(File source, boolean overrideExistingObject, boolean .clickImportFileButton() .feedback(); - Assert.assertTrue(feedback.isSuccess() || (ignoreWarning && feedback.isWarning())); + boolean isSuccess = false; + try { + isSuccess = feedback.isSuccess(); + } catch (ElementNotFound e) { + if (!ignoreWarning) { + throw e; + } + // else ignoring exception but isSuccess is still false + } + if (!isSuccess && ignoreWarning) { + isSuccess = feedback.isWarning(); + } + Assert.assertTrue(isSuccess); } protected void importObject(File source, boolean overrideExistingObject) { diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M3ResourcesAttributesAndMappingsTest.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M3ResourcesAttributesAndMappingsTest.java index 17260f585b0..545e3e7d1d2 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M3ResourcesAttributesAndMappingsTest.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M3ResourcesAttributesAndMappingsTest.java @@ -49,7 +49,7 @@ public void beforeClass() throws IOException { super.beforeClass(); } - @Test + @Test(groups={"M3"}) public void test0301ViewingResources() throws Exception { initTestDirectory(DIRECTORY_CURRENT_TEST); @@ -143,7 +143,7 @@ public void test0301ViewingResources() throws Exception { changeResourceAttribute(CSV_3_RESOURCE_NAME, ScenariosCommons.CSV_RESOURCE_ATTR_FILE_PATH, csv3TargetFile.getAbsolutePath(), true); } - @Test(dependsOnMethods = {"test0301ViewingResources"}) + @Test(dependsOnMethods = {"test0301ViewingResources"}, groups={"M3"}) public void test0302BasicProvisioning() { UserPage user = basicPage.newUser(); user.selectTabBasic() @@ -191,7 +191,7 @@ public void test0302BasicProvisioning() { PrismForm accountForm = showShadow(CSV_1_RESOURCE_NAME, "Login", "kirk") .form(); - Selenide.sleep(2000); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); Assert.assertTrue(accountForm.compareInputAttributeValue("fname", "Jim T.")); showUser("kirk") diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M4ProvisioningToResources.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M4ProvisioningToResources.java index ad46cff6900..d427bf81079 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M4ProvisioningToResources.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M4ProvisioningToResources.java @@ -45,7 +45,7 @@ public class M4ProvisioningToResources extends AbstractLabTest { private static final File CSV_3_RESOURCE_FILE_4_4 = new File(LAB_OBJECTS_DIRECTORY + "resources/localhost-csvfile-3-ldap-4-4.xml"); - @Test + @Test(groups={"M4"}, dependsOnGroups={"M3"}) public void test0401BasicProvisioningToMultipleResources() { importObject(CSV_1_RESOURCE_FILE,true); @@ -181,7 +181,7 @@ public void test0401BasicProvisioningToMultipleResources() { Assert.assertFalse(existShadow(CSV_2_RESOURCE_NAME, "Login", "kirk")); } - @Test(dependsOnMethods = {"test0401BasicProvisioningToMultipleResources"}) + @Test(dependsOnMethods = {"test0401BasicProvisioningToMultipleResources"}, groups={"M4"}, dependsOnGroups={"M3"}) public void test0402AddingMappings() { importObject(CSV_1_RESOURCE_FILE_4_2,true); @@ -216,7 +216,7 @@ public void test0402AddingMappings() { } - @Test(dependsOnMethods = {"test0402AddingMappings"}) + @Test(dependsOnMethods = {"test0402AddingMappings"}, groups={"M4"}, dependsOnGroups={"M3"}) public void test0403ModifyingExistingMappings() { importObject(CSV_1_RESOURCE_FILE_4_3,true); @@ -271,7 +271,7 @@ public void test0403ModifyingExistingMappings() { } - @Test(dependsOnMethods = {"test0403ModifyingExistingMappings"}) + @Test(dependsOnMethods = {"test0403ModifyingExistingMappings"}, groups={"M4"}, dependsOnGroups={"M3"}) public void test0404AddingANewAttribute() { ((PrismFormWithActionButtons>>) ((AbstractTableWithPrismView)showUser("kirk") diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M5AccountsAssignmentsAndRoles.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M5AccountsAssignmentsAndRoles.java index 6e52b639921..466da487dd3 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M5AccountsAssignmentsAndRoles.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M5AccountsAssignmentsAndRoles.java @@ -60,7 +60,7 @@ public class M5AccountsAssignmentsAndRoles extends AbstractLabTest { private static final File ARCHETYPE_EXTERNAL_FILE = new File(LAB_OBJECTS_DIRECTORY + "archetypes/archetype-external.xml"); private static final File SYSTEM_CONFIGURATION_FILE_5_7 = new File(LAB_OBJECTS_DIRECTORY + "systemConfiguration/system-configuration-5-7.xml"); - @Test + @Test(groups={"M5"}, dependsOnGroups={"M4"}) public void test0501UsingRBAC() { importObject(INTERNAL_EMPLOYEE_ROLE_FILE,true); importObject(INCOGNITO_ROLE_FILE,true); @@ -96,7 +96,7 @@ public void test0501UsingRBAC() { } - @Test(dependsOnMethods = {"test0501UsingRBAC"}) + @Test(dependsOnMethods = {"test0501UsingRBAC"}, groups={"M5"}, dependsOnGroups={"M4"}) public void test0502SegregationOfDuties() { showUser("kirk").selectTabAssignments() .clickAddAssignemnt() @@ -115,7 +115,7 @@ public void test0502SegregationOfDuties() { .isError(); } - @Test(dependsOnMethods = {"test0502SegregationOfDuties"}) + @Test(dependsOnMethods = {"test0502SegregationOfDuties"}, groups={"M5"}, dependsOnGroups={"M4"}) public void test0504CreatingRoles() { InducementsTab tab = basicPage.newRole() .selectTabBasic() @@ -140,7 +140,7 @@ public void test0504CreatingRoles() { Utils.removeAssignments(showUser("kirk").selectTabAssignments(), "Too Many Secrets"); } - @Test(dependsOnMethods = {"test0504CreatingRoles"}) + @Test(dependsOnMethods = {"test0504CreatingRoles"}, groups={"M5"}, dependsOnGroups={"M4"}) public void test0505DisableOnUnassign() { importObject(CSV_1_RESOURCE_FILE_5_5,true); changeResourceAttribute(CSV_1_RESOURCE_NAME, ScenariosCommons.CSV_RESOURCE_ATTR_FILE_PATH, csv1TargetFile.getAbsolutePath(), true); @@ -180,7 +180,7 @@ public void test0505DisableOnUnassign() { Assert.assertTrue(accountForm.compareSelectAttributeValue("administrativeStatus", "Enabled")); } - @Test(dependsOnMethods = {"test0505DisableOnUnassign"}) + @Test(dependsOnMethods = {"test0505DisableOnUnassign"}, groups={"M5"}, dependsOnGroups={"M4"}) public void test0506InactiveAssignment() { Utils.addAsignments(showUser("kirk").selectTabAssignments(), "Too Many Secrets"); AccountPage shadow = showShadow(CSV_1_RESOURCE_NAME, "Login", "jkirk"); @@ -226,7 +226,7 @@ public void test0506InactiveAssignment() { Utils.removeAssignments(showUser("kirk").selectTabAssignments(), "Too Many Secrets"); } - @Test(dependsOnMethods = {"test0506InactiveAssignment"}) + @Test(dependsOnMethods = {"test0506InactiveAssignment"}, groups={"M5"}, dependsOnGroups={"M4"}) public void test0507ArchetypesIntroduction() { importObject(ARCHETYPE_EMPLOYEE_FILE, true); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M6ConfiguringMultipleAccountTypes.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M6ConfiguringMultipleAccountTypes.java index 2f7218ec91b..8200bf44be5 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M6ConfiguringMultipleAccountTypes.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M6ConfiguringMultipleAccountTypes.java @@ -15,9 +15,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.io.File; +import java.io.IOException; /** * @author skublik @@ -34,7 +36,7 @@ public class M6ConfiguringMultipleAccountTypes extends AbstractLabTest { private static final String CSV1_TESTER_ROLE_NAME = "CSV-1 Tester"; private static final String CSV3_ADMIN_ROLE_NAME = "CSV-3 Admin"; - @Test + @Test(groups={"M6"}, dependsOnGroups={"M5"}) public void test0601UsingAccountIntentsForProvisioning() { importObject(CSV_1_RESOURCE_FILE_6_1,true); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M7SynchronizationFlavours.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M7SynchronizationFlavours.java index ed5e96a01ec..3d55b3ff12e 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M7SynchronizationFlavours.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M7SynchronizationFlavours.java @@ -34,7 +34,7 @@ public class M7SynchronizationFlavours extends AbstractLabTest{ private static final Logger LOG = LoggerFactory.getLogger(M7SynchronizationFlavours.class); - @Test + @Test(groups={"M7"}, dependsOnGroups={"M6"}) public void test0701RunningImportFromResource() throws IOException { hrTargetFile = new File(csvTargetDir, HR_FILE_SOURCE_NAME); FileUtils.copyFile(HR_SOURCE_FILE, hrTargetFile); @@ -87,7 +87,7 @@ public void test0701RunningImportFromResource() throws IOException { Assert.assertEquals(basicPage.listUsers(ARCHETYPE_EMPLOYEE_PLURAL_LABEL).getCountOfObjects(), 15); } - @Test(dependsOnMethods = {"test0701RunningImportFromResource"}) + @Test(dependsOnMethods = {"test0701RunningImportFromResource"}, groups={"M7"}, dependsOnGroups={"M6"}) public void test0702RunningAccountReconciliation() { Selenide.sleep(MidPoint.TIMEOUT_MEDIUM_6_S); createReconTask("CSV-1 Reconciliation", CSV_1_RESOURCE_NAME); @@ -109,7 +109,7 @@ public void test0702RunningAccountReconciliation() { Assert.assertTrue(containsProjection("X001212", CSV_3_RESOURCE_OID, "cn=John Smith,ou=ExAmPLE,dc=example,dc=com")); } - @Test(dependsOnMethods = {"test0702RunningAccountReconciliation"}) + @Test(dependsOnMethods = {"test0702RunningAccountReconciliation"}, groups={"M7"}, dependsOnGroups={"M6"}) public void test0703RunningAttributeReconciliation() throws IOException { FileUtils.copyFile(CSV_1_SOURCE_FILE_7_3, csv1TargetFile); @@ -126,7 +126,7 @@ public void test0703RunningAttributeReconciliation() throws IOException { } - @Test(dependsOnMethods = {"test0703RunningAttributeReconciliation"}) + @Test(dependsOnMethods = {"test0703RunningAttributeReconciliation"}, groups={"M7"}, dependsOnGroups={"M6"}) public void test0704RunningLiveSync() throws IOException { Selenide.sleep(MidPoint.TIMEOUT_MEDIUM_6_S); TaskPage task = basicPage.newTask(); @@ -141,6 +141,11 @@ public void test0704RunningLiveSync() throws IOException { .editRefValue("objectRef") .selectType("Resource") .table() + .search() + .byName() + .inputValue(HR_RESOURCE_NAME) + .updateSearch() + .and() .clickByName(HR_RESOURCE_NAME) .and() .and() @@ -214,6 +219,11 @@ private void createReconTask(String reconTaskName, String resource){ .editRefValue("objectRef") .selectType("Resource") .table() + .search() + .byName() + .inputValue(resource) + .updateSearch() + .and() .clickByName(resource) .and() .and() diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M8ExtendingMidPointXMLSchema.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M8ExtendingMidPointXMLSchema.java index 70709d51823..5479eeafe70 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M8ExtendingMidPointXMLSchema.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M8ExtendingMidPointXMLSchema.java @@ -61,7 +61,7 @@ protected void springTestContextPrepareTestInstance() throws Exception { super.springTestContextPrepareTestInstance(); } - @Test + @Test(groups={"M8"}, dependsOnGroups={"M7"}) public void test0801ExtendingMidPointXMLSchema() { PrismForm> form = basicPage.newUser() .selectTabBasic() @@ -80,6 +80,11 @@ public void test0801ExtendingMidPointXMLSchema() { Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); ResourceAccountsTab accountTab = basicPage.listResources() .table() + .search() + .byName() + .inputValue(HR_RESOURCE_NAME) + .updateSearch() + .and() .clickByName(HR_RESOURCE_NAME) .clickAccountsTab() .clickSearchInResource(); diff --git a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M9OrganizationalStructure.java b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M9OrganizationalStructure.java index 4ccaceb2107..29d5ba3948c 100644 --- a/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M9OrganizationalStructure.java +++ b/testing/schrodingertest/src/test/java/com/evolveum/midpoint/testing/schrodinger/labs/M9OrganizationalStructure.java @@ -6,6 +6,8 @@ */ package com.evolveum.midpoint.testing.schrodinger.labs; +import com.codeborne.selenide.Selenide; + import com.evolveum.midpoint.schrodinger.page.configuration.AboutPage; import com.evolveum.midpoint.schrodinger.page.login.FormLoginPage; import com.evolveum.midpoint.schrodinger.page.org.OrgPage; @@ -53,17 +55,7 @@ public void afterClass() { .clickYes(); } - @BeforeClass - @Override - public void beforeClass() throws IOException { - super.beforeClass(); - csv1TargetFile = new File("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-1.csv"); - csv2TargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-2.csv"); - csv3TargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/csv-3.csv"); - hrTargetFile = new File ("/home/lskublik/Documents/Evolveum/actual/master/05-02-2020/midpoint/testing/schrodingertest/target/midpoint-home/schrodinger/labTests/source.csv"); - } - - @Test + @Test(groups={"M9"}, dependsOnGroups={"M8"}) public void test0901ImportStaticOrgStructure() { importObject(ARCHETYPE_ORG_FUNCTIONAL_FILE, true, true); importObject(ARCHETYPE_ORG_COMPANY_FILE, true); @@ -93,7 +85,7 @@ public void test0901ImportStaticOrgStructure() { .containsChildOrg("Secret Operations", "Transportation and Logistics Department")); } - @Test(dependsOnMethods = {"test0901ImportStaticOrgStructure"}) + @Test(dependsOnMethods = {"test0901ImportStaticOrgStructure"}, groups={"M9"}, dependsOnGroups={"M8"}) public void test0902CreateStaticOrgStructure() { basicPage.orgStructure() .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") @@ -119,7 +111,7 @@ public void test0902CreateStaticOrgStructure() { .getOrgHierarchyPanel() .expandOrg("Secret Operations") .expandOrg("Transportation and Logistics Department") - .editOrg("Warp Speed Research") + .showTreeNodeDropDownMenu("Warp Speed Research") .edit() .selectTabBasic() .form() @@ -164,4 +156,140 @@ public void test0902CreateStaticOrgStructure() { .isSuccess(); } + @Test(dependsOnMethods = {"test0902CreateStaticOrgStructure"}, groups={"M9"}, dependsOnGroups={"M8"}) + public void test0903OrganizationActingAsARole() { + Assert.assertFalse(basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .expandOrg("Secret Operations") + .expandOrg("Transportation and Logistics Department") + .selectOrgInTree("Warp Speed Research") + .and() + .getMemberPanel() + .selectType("User") + .table() + .containsText("kirk")); + + basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .showTreeNodeDropDownMenu("Warp Speed Research") + .edit() + .selectTabInducements() + .clickAddInducement() + .table() + .search() + .byName() + .inputValue("Secret Projects I") + .updateSearch() + .and() + .selectCheckboxByName("Secret Projects I") + .and() + .clickAdd() + .and() + .clickSave() + .feedback() + .isSuccess(); + + basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .selectOrgInTree("Warp Speed Research") + .and() + .getMemberPanel() + .table() + .clickHeaderActionDropDown() + .assign() + .selectType("User") + .table() + .search() + .byName() + .inputValue("kirk") + .updateSearch() + .and() + .selectCheckboxByName("kirk") + .and() + .clickAdd() + .and() + .and() + .and() + .feedback() + .isInfo(); + + Assert.assertTrue(basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .expandOrg("Secret Operations") + .expandOrg("Transportation and Logistics Department") + .selectOrgInTree("Warp Speed Research") + .and() + .getMemberPanel() + .selectType("User") + .table() + .containsText("kirk")); + + Assert.assertTrue( + showShadow(CSV_1_RESOURCE_NAME, "Login", "jkirk") + .form() + .compareInputAttributeValues("groups", "Internal Employees", + "Essential Documents", "Teleportation", "Time Travel")); + + basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .expandOrg("Secret Operations") + .expandOrg("Transportation and Logistics Department") + .showTreeNodeDropDownMenu("Warp Speed Research") + .edit() + .selectTabInducements() + .clickAddInducement() + .selectType("Role") + .table() + .search() + .byName() + .inputValue("Secret Projects II") + .updateSearch() + .and() + .selectCheckboxByName("Secret Projects II") + .and() + .clickAdd() + .and() + .clickSave() + .feedback() + .isSuccess(); + + Assert.assertTrue( + showShadow(CSV_1_RESOURCE_NAME, "Login", "jkirk") + .form() + .compareInputAttributeValues("groups", "Internal Employees", + "Essential Documents", "Teleportation", "Time Travel")); + + basicPage.orgStructure() + .selectTabWithRootOrg("ExAmPLE, Inc. - Functional Structure") + .getOrgHierarchyPanel() + .selectOrgInTree("Warp Speed Research") + .and() + .getMemberPanel() + .table() + .clickHeaderActionDropDown() + .recompute() + .clickYes() + .and() + .and() + .and() + .feedback() + .isInfo(); + + Assert.assertTrue( + showShadow(CSV_1_RESOURCE_NAME, "Login", "jkirk") + .form() + .compareInputAttributeValues("groups", "Internal Employees", + "Essential Documents", "Teleportation", "Time Travel", "Lucky Numbers", + "Presidential Candidates Motivation")); + + Assert.assertTrue(showUser("kirk").selectTabAssignments() + .selectTypeAllDirectIndirect() + .containsIndirectAssignments("Secret Projects II")); + } + } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/FocusTableWithChoosableElements.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/FocusTableWithChoosableElements.java index 63cd0a16e90..6185565fd72 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/FocusTableWithChoosableElements.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/FocusTableWithChoosableElements.java @@ -48,9 +48,10 @@ private String constructCheckBoxIdBasedOnRow(String row) { @Override public Search> search() { - SelenideElement searchElement = $(By.cssSelector(".form-inline.pull-right.search-form")) + SelenideElement searchElement = getParentElement().$x(".//div[contains(@class, \"form-inline\") " + + "and contains(@class, \"pull-right\") and contains(@class, \"search-form\")]") .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); - return new Search<>(this, searchElement); + return new Search>(this, searchElement); } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/ProjectionsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/ProjectionsTab.java index 5de0bab92a8..acd5fe462e1 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/ProjectionsTab.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/ProjectionsTab.java @@ -111,7 +111,9 @@ public FocusSetProjectionModal> clickAddProjection() { $(Schrodinger.byElementAttributeValue("i", "class", "fa fa-plus ")) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - SelenideElement actualModal = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Choose object")); + SelenideElement actualModal = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Choose object")) + .waitUntil(Condition.exist, MidPoint.TIMEOUT_LONG_1_M) + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); return new FocusSetProjectionModal>(this, actualModal); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Popover.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Popover.java index 94d8f3c356e..6968abd6b21 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Popover.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Popover.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.schrodinger.component.common; import com.codeborne.selenide.Condition; +import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.Component; @@ -23,34 +24,41 @@ public Popover(T parent, SelenideElement parentElement) { } public Popover inputValue(String input) { - getDisplayedElement(getParentElement().$$(Schrodinger.byDataId("textInput"))).waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).setValue(input); - + SelenideElement inputField = getParentElement().parent().$x(".//input[@" + Schrodinger.DATA_S_ID + "='textInput']") + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + if(!input.equals(inputField.getValue())) { + inputField.setValue(input); + } return this; } public Popover inputRefOid(String oid) { - getDisplayedElement(getParentElement().$$(Schrodinger.byDataId("oid"))).waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).setValue(oid); + getParentElement().parent().$x(".//input[@" + Schrodinger.DATA_S_ID + "='oid']").waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).setValue(oid); return this; } public Popover inputValueWithEnter(String input) { - SelenideElement inputField = getDisplayedElement(getParentElement().$$(Schrodinger.byDataId("textInput"))); - inputField.waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).setValue(input); - inputField.sendKeys(Keys.ENTER); + SelenideElement inputField = getParentElement().parent().$x(".//input[@" + Schrodinger.DATA_S_ID + "='textInput']") + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + if(!input.equals(inputField.getValue())) { + inputField.setValue(input); + inputField.sendKeys(Keys.ENTER); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + } return this; } public T updateSearch() { - SelenideElement button = getDisplayedElement(getParentElement().$$(Schrodinger.byDataId("update"))); + SelenideElement button = getParentElement().parent().$x(".//a[@"+Schrodinger.DATA_S_ID+"='update']"); button.click(); - button.waitUntil(Condition.disappears, MidPoint.TIMEOUT_DEFAULT_2_S); + button.waitUntil(Condition.disappears, MidPoint.TIMEOUT_MEDIUM_6_S); return this.getParent(); } public T close() { - getDisplayedElement(getParentElement().$$(Schrodinger.byDataId("searchSimple"))).click(); + getDisplayedElement(getParentElement().$$(".//a[@"+Schrodinger.DATA_S_ID+"='searchSimple']")).click(); return this.getParent(); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java index 8d20ca56f73..15f0a3499d7 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/common/Search.java @@ -26,8 +26,8 @@ public Popover> byName() { choiceBasicSearch(); - getParentElement().$(Schrodinger.byDataId("a", "mainButton")).waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - Selenide.sleep(2000); + getParentElement().$x(".//a[@"+Schrodinger.DATA_S_ID+"='mainButton']").waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); return new Popover<>(this, getDisplayedPopover()); } @@ -56,12 +56,12 @@ public InputBox> byFullText() { public Search addSearchItem(String name) { choiceBasicSearch(); - getParentElement().$(Schrodinger.byDataId("a", "more")).waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + getParentElement().$x(".//a[@"+Schrodinger.DATA_S_ID+"='more']").waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); SelenideElement popover = getDisplayedPopover(); - popover.$(Schrodinger.byDataId("input", "addText")).setValue(name); + popover.$x(".//input[@"+Schrodinger.DATA_S_ID+"='addText']").setValue(name); Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); - popover.$(Schrodinger.byDataId("a", "propLink")).click(); + popover.$x(".//a[@"+Schrodinger.DATA_S_ID+"='propLink']").click(); return this; } @@ -72,7 +72,7 @@ public Popover> byItem(String name) { SelenideElement item = getItemByName(name); if (item == null) { addSearchItem(name); - Selenide.sleep(2000); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); } item = getItemByName(name); if (item == null) { @@ -80,7 +80,7 @@ public Popover> byItem(String name) { } item.waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - Selenide.sleep(2000); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); return new Popover<>(this, getDisplayedPopover()); } @@ -112,7 +112,7 @@ public Search resetBasicSearch() { SelenideElement nameItem = getItemByName("Name"); if (nameItem != null) { nameItem.waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - Selenide.sleep(1000); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); new Popover<>(this, nameItem).inputValue("").updateSearch(); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java index 7863706117c..9f5082f7938 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetAssignmentsModal.java @@ -11,6 +11,8 @@ import com.evolveum.midpoint.schrodinger.MidPoint; import com.evolveum.midpoint.schrodinger.component.FocusTableWithChoosableElements; import com.evolveum.midpoint.schrodinger.util.Schrodinger; +import com.evolveum.midpoint.util.aspect.MidpointInterceptor; + import org.openqa.selenium.By; import static com.codeborne.selenide.Selenide.$; @@ -56,7 +58,7 @@ public FocusSetAssignmentsModal selectIntent(String option) { public FocusTableWithChoosableElements> table() { SelenideElement resourcesBox = getParentElement().$x(".//div[@class='box boxed-table']"); - return new FocusTableWithChoosableElements<>(this, resourcesBox){ + return new FocusTableWithChoosableElements>(this, resourcesBox){ @@ -67,7 +69,7 @@ public T clickAdd() { $(Schrodinger.byDataResourceKey("userBrowserDialog.button.addButton")) .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); - + getParentElement().waitWhile(Condition.exist, MidPoint.TIMEOUT_LONG_1_M); return this.getParent(); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java index 8a8e03fa41b..c85206d56f3 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/modal/FocusSetProjectionModal.java @@ -24,7 +24,8 @@ public FocusSetProjectionModal(T parent, SelenideElement parentElement) { } public FocusTableWithChoosableElements> table() { - SelenideElement resourcesBox = $(By.cssSelector("box boxed-table")); + SelenideElement resourcesBox = getParentElement().$x(".//div[contains(@class, \"box\") " + + "and contains(@class, \"boxed-table\")]"); return new FocusTableWithChoosableElements<>(this, resourcesBox); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberPanel.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberPanel.java index de0b79c6470..289257aa80b 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberPanel.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberPanel.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.schrodinger.component.org; import com.codeborne.selenide.Condition; +import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; @@ -14,6 +15,8 @@ import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; import com.evolveum.midpoint.schrodinger.component.common.table.TableWithPageRedirect; import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; +import com.evolveum.midpoint.schrodinger.component.user.UsersPageTable; +import com.evolveum.midpoint.schrodinger.component.user.UsersTableDropDown; import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; import com.evolveum.midpoint.schrodinger.page.user.UserPage; import com.evolveum.midpoint.schrodinger.util.Schrodinger; @@ -60,18 +63,8 @@ public MemberPanel selectType(String type) { return this; } - public AssignmentHolderObjectListTable, AssignmentHolderDetailsPage> table() { + public MemberTable> table() { SelenideElement table = getParentElement().$x(".//div[@" + Schrodinger.DATA_S_ID + "='table']"); - return new AssignmentHolderObjectListTable, AssignmentHolderDetailsPage>(this, table) { - @Override - public AssignmentHolderDetailsPage getObjectDetailsPage() { - return new AssignmentHolderDetailsPage() {}; - } - - @Override - public

>> TableHeaderDropDownMenu

clickHeaderActionDropDown() { - return null; - } - }; + return new MemberTable<>(this, table); } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberTable.java new file mode 100644 index 00000000000..03c6fc50f6d --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberTable.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.org; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.Selenide; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.assignmentholder.AssignmentHolderObjectListTable; +import com.evolveum.midpoint.schrodinger.page.AssignmentHolderDetailsPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import static com.codeborne.selenide.Selenide.$; + +/** + * @author skublik + */ + +public class MemberTable extends AssignmentHolderObjectListTable { + + public MemberTable(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + @Override + public AssignmentHolderDetailsPage getObjectDetailsPage() { + return new AssignmentHolderDetailsPage() {}; + } + + @Override + public MemberTableDropDown> clickHeaderActionDropDown() { + SelenideElement dropDownButton = $(Schrodinger.bySelfOrAncestorElementAttributeValue("button", "data-toggle", "dropdown", + "class", "sortableLabel")); + dropDownButton.waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); + SelenideElement dropDown = dropDownButton.parent().$x(".//ul[@"+Schrodinger.DATA_S_ID+"='dropDownMenu']") + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + + return new MemberTableDropDown>(this, dropDown); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberTableDropDown.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberTableDropDown.java new file mode 100644 index 00000000000..5a1c21133ce --- /dev/null +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/MemberTableDropDown.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.schrodinger.component.org; + +import com.codeborne.selenide.Condition; +import com.codeborne.selenide.SelenideElement; + +import com.evolveum.midpoint.schrodinger.MidPoint; +import com.evolveum.midpoint.schrodinger.component.AssignmentsTab; +import com.evolveum.midpoint.schrodinger.component.common.DropDown; +import com.evolveum.midpoint.schrodinger.component.modal.ConfirmationModal; +import com.evolveum.midpoint.schrodinger.component.modal.FocusSetAssignmentsModal; +import com.evolveum.midpoint.schrodinger.component.table.TableHeaderDropDownMenu; +import com.evolveum.midpoint.schrodinger.page.org.OrgPage; +import com.evolveum.midpoint.schrodinger.util.Schrodinger; + +import static com.codeborne.selenide.Selenide.$; + +/** + * @author skublik + */ + +public class MemberTableDropDown extends TableHeaderDropDownMenu { + public MemberTableDropDown(T parent, SelenideElement parentElement) { + super(parent, parentElement); + } + + public FocusSetAssignmentsModal assign(){ + getParentElement().$x(".//schrodinger[@"+ Schrodinger.DATA_S_RESOURCE_KEY +"='abstractRoleMemberPanel.menu.assign']").parent() + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + SelenideElement modalElement = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Select object(s)")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + + return new FocusSetAssignmentsModal((T) this.getParent(), modalElement); + } + + public ConfirmationModal recompute(){ + getParentElement().$x(".//schrodinger[@"+ Schrodinger.DATA_S_RESOURCE_KEY +"='abstractRoleMemberPanel.menu.recompute']").parent() + .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + + SelenideElement actualModal = $(Schrodinger.byElementAttributeValue("div", "aria-labelledby", "Confirm action")) + .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S); + + return new ConfirmationModal<>(this.getParent(), actualModal); + } +} diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgHierarchyPanel.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgHierarchyPanel.java index c7798a701e0..5f6c5a469d5 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgHierarchyPanel.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgHierarchyPanel.java @@ -89,7 +89,7 @@ public OrgHierarchyPanel expandOrg(String orgName) { return this; } - public OrgTreeNodeDropDown editOrg(String orgName) { + public OrgTreeNodeDropDown showTreeNodeDropDownMenu(String orgName) { SelenideElement parentNode = getParentOrgNode(orgName); SelenideElement node = parentNode.$x(".//div[@"+Schrodinger.DATA_S_ID+"='node']"); SelenideElement menuButton = node.$x(".//span[@" + Schrodinger.DATA_S_ID + "='menu']"); diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgTreeNodeDropDown.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgTreeNodeDropDown.java index 1c4879b873d..97b20dee065 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgTreeNodeDropDown.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/org/OrgTreeNodeDropDown.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.schrodinger.component.org; import com.codeborne.selenide.Condition; +import com.codeborne.selenide.Selenide; import com.codeborne.selenide.SelenideElement; import com.evolveum.midpoint.schrodinger.MidPoint; @@ -27,6 +28,7 @@ public OrgTreeNodeDropDown(T parent, SelenideElement parentElement) { public OrgPage edit(){ getParentElement().$x(".//schrodinger[@"+ Schrodinger.DATA_S_RESOURCE_KEY +"='TreeTablePanel.edit']").parent() .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + Selenide.sleep(MidPoint.TIMEOUT_DEFAULT_2_S); return new OrgPage(); } } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java index aefa2b20f89..48e5902d6e4 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceAccountsTab.java @@ -71,7 +71,7 @@ public ResourceAccountsTab clickSearchInRepository() { .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); $(Schrodinger.byDataId("a", "repositorySearch")) - .waitUntil(Condition.enabled, MidPoint.TIMEOUT_DEFAULT_2_S); + .waitUntil(Condition.cssClass("active"), MidPoint.TIMEOUT_MEDIUM_6_S); return this; } @@ -80,7 +80,7 @@ public ResourceAccountsTab clickSearchInResource() { $(Schrodinger.byDataId("a", "resourceSearch")) .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); $(Schrodinger.byDataId("a", "resourceSearch")) - .waitUntil(Condition.enabled, MidPoint.TIMEOUT_DEFAULT_2_S); + .waitUntil(Condition.cssClass("active"), MidPoint.TIMEOUT_MEDIUM_6_S); return this; } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java index b3f11c9a516..cedf5686602 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/component/resource/ResourceShadowTable.java @@ -28,8 +28,9 @@ public ResourceShadowTable(T parent, SelenideElement parentElement) { @Override public AccountPage clickByName(String name) { - getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)) - .waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + SelenideElement link = getParentElement().$(Schrodinger.byElementValue("span", "data-s-id", "label", name)); + link.waitUntil(Condition.appears, MidPoint.TIMEOUT_DEFAULT_2_S).click(); + link.waitWhile(Condition.exist, MidPoint.TIMEOUT_LONG_1_M); return new AccountPage(); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java index 85513612e6f..de094491c6c 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/AssignmentHolderDetailsPage.java @@ -50,7 +50,8 @@ private SelenideElement getPreviewButton() { public TabPanel getTabPanel() { SelenideElement tabPanelElement = $(Schrodinger.byDataId("div", "tabPanel")) - .waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); + .waitUntil(Condition.exist, MidPoint.TIMEOUT_DEFAULT_2_S); + tabPanelElement.waitUntil(Condition.appear, MidPoint.TIMEOUT_DEFAULT_2_S); return new TabPanel<>(this, tabPanelElement); } diff --git a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/resource/EditResourceConfigurationPage.java b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/resource/EditResourceConfigurationPage.java index cb3d77753c1..931b4128b63 100644 --- a/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/resource/EditResourceConfigurationPage.java +++ b/tools/schrodinger/src/main/java/com/evolveum/midpoint/schrodinger/page/resource/EditResourceConfigurationPage.java @@ -60,10 +60,10 @@ public ResourceResultsHandlersTab selectTabResultHandlers() { public TestConnectionModal clickSaveAndTestConnection() { $(Schrodinger.byDataId("testConnection")).waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S).click(); -// Selenide.sleep(MidPoint.TIMEOUT_LONG_1_M); SelenideElement testModalBox = $(Schrodinger .byElementAttributeValue("div", "aria-labelledby", "Test connection result(s)")) - .waitUntil(Condition.visible, MidPoint.TIMEOUT_EXTRA_LONG_1_M); + .waitUntil(Condition.exist, MidPoint.TIMEOUT_LONG_1_M) + .waitUntil(Condition.visible, MidPoint.TIMEOUT_DEFAULT_2_S); return new TestConnectionModal<>(this, testModalBox); }