From 7476120e4d7920e559e4be0d18895af481313a8e Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Tue, 19 Jul 2022 11:59:47 -0700 Subject: [PATCH 01/12] Add screenshots (on error) to LimitedRead tests. Added check to make sure parents are added or removed from a sample's lineage. Updaed a comment. --- .../test/components/ui/entities/ParentEntityEditPanel.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index d71a19271a..eaa0185acf 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -363,7 +363,8 @@ public ParentEntityEditPanel addParents(String typeName, List parentIds) { int selCount = selectParent.getSelections().size(); selectParent.typeAheadSelect(id); - WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, 500); + WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, + String.format("Did not successfully add parent %s from %s.", id, typeName), 500); } return this; @@ -424,6 +425,10 @@ public ParentEntityEditPanel removeEntityType(String typeName) public ParentEntityEditPanel removeParent(String parentEntity, String parentId) { getParent(parentEntity).removeSelection(parentId); + + WebDriverWrapper.waitFor(()->!getParent(parentEntity).getSelections().contains(parentId), + String.format("Parent %s / %s was not removed.", parentEntity, parentId), 500); + return this; } From 7543c38dcff20917802f9b9de15522a1650309b4 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Tue, 19 Jul 2022 14:13:48 -0700 Subject: [PATCH 02/12] Increase wait time for parent to be removed. --- .../test/components/ui/entities/ParentEntityEditPanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index eaa0185acf..4efe3f6234 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -364,7 +364,7 @@ public ParentEntityEditPanel addParents(String typeName, List parentIds) int selCount = selectParent.getSelections().size(); selectParent.typeAheadSelect(id); WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, - String.format("Did not successfully add parent %s from %s.", id, typeName), 500); + String.format("Did not successfully add parent %s from %s.", id, typeName), 1_000); } return this; @@ -427,7 +427,7 @@ public ParentEntityEditPanel removeParent(String parentEntity, String parentId) getParent(parentEntity).removeSelection(parentId); WebDriverWrapper.waitFor(()->!getParent(parentEntity).getSelections().contains(parentId), - String.format("Parent %s / %s was not removed.", parentEntity, parentId), 500); + String.format("Parent %s / %s was not removed.", parentEntity, parentId), 1_000); return this; } From 0b6facac3490efb5a1ef3972248d2f11980525d3 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Tue, 19 Jul 2022 17:18:06 -0700 Subject: [PATCH 03/12] Use an implied retry to delete a parent. --- .../test/components/ui/entities/ParentEntityEditPanel.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index 4efe3f6234..a30263cdba 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -424,9 +424,12 @@ public ParentEntityEditPanel removeEntityType(String typeName) public ParentEntityEditPanel removeParent(String parentEntity, String parentId) { - getParent(parentEntity).removeSelection(parentId); - WebDriverWrapper.waitFor(()->!getParent(parentEntity).getSelections().contains(parentId), + WebDriverWrapper.waitFor(()-> + { + getParent(parentEntity).removeSelection(parentId); + return !getParent(parentEntity).getSelections().contains(parentId); + }, String.format("Parent %s / %s was not removed.", parentEntity, parentId), 1_000); return this; From e9bbee2aa967b45fc628e1aa0c82be57d685f05b Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Tue, 19 Jul 2022 21:40:15 -0700 Subject: [PATCH 04/12] Improve check for parent removed. --- .../components/ui/entities/ParentEntityEditPanel.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index a30263cdba..38be442b09 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -427,8 +427,15 @@ public ParentEntityEditPanel removeParent(String parentEntity, String parentId) WebDriverWrapper.waitFor(()-> { - getParent(parentEntity).removeSelection(parentId); - return !getParent(parentEntity).getSelections().contains(parentId); + try + { + getParent(parentEntity).removeSelection(parentId); + return !getParent(parentEntity).getSelections().contains(parentId); + } + catch (NoSuchElementException nse) + { + return true; + } }, String.format("Parent %s / %s was not removed.", parentEntity, parentId), 1_000); From 91815c6acd17d2abf7140a78ac155182ac3c006d Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Wed, 20 Jul 2022 09:56:46 -0700 Subject: [PATCH 05/12] Improve check that parent has been removed. --- .../ui/entities/ParentEntityEditPanel.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index 38be442b09..7fbbd4e0cd 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -425,17 +425,19 @@ public ParentEntityEditPanel removeEntityType(String typeName) public ParentEntityEditPanel removeParent(String parentEntity, String parentId) { + // The ReactSelect does not always reliably remove a selected item. If it did not successfully do it on the first + // try, try again until it is gone or the time limit is met. WebDriverWrapper.waitFor(()-> { - try - { - getParent(parentEntity).removeSelection(parentId); - return !getParent(parentEntity).getSelections().contains(parentId); - } - catch (NoSuchElementException nse) - { - return true; - } + // Guard against react selector being in a 'Loading...' state. + WebDriverWrapper.waitFor(()->getParent(parentEntity).getComponentElement().isDisplayed(), + String.format("Selector for parents from '%s' is not visible.", parentEntity), 1_000); + + // Remove the parent. + getParent(parentEntity).removeSelection(parentId); + + // Verify that the parent has been removed. + return !getParent(parentEntity).getSelections().contains(parentId); }, String.format("Parent %s / %s was not removed.", parentEntity, parentId), 1_000); From 770cb0ceec31e4a01b87964fe8ed3811898df069 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Thu, 21 Jul 2022 09:03:27 -0700 Subject: [PATCH 06/12] Adding some comments. --- .../test/components/ui/entities/ParentEntityEditPanel.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index 7fbbd4e0cd..f9e4f516c2 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -363,6 +363,8 @@ public ParentEntityEditPanel addParents(String typeName, List parentIds) { int selCount = selectParent.getSelections().size(); selectParent.typeAheadSelect(id); + + // Validate that the parents were indeed added. WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, String.format("Did not successfully add parent %s from %s.", id, typeName), 1_000); } @@ -426,7 +428,7 @@ public ParentEntityEditPanel removeParent(String parentEntity, String parentId) { // The ReactSelect does not always reliably remove a selected item. If it did not successfully do it on the first - // try, try again until it is gone or the time limit is met. + // try, try again until it is gone or the time limit is hit. WebDriverWrapper.waitFor(()-> { // Guard against react selector being in a 'Loading...' state. From 9b55bb382e95a15b780ee1b5a3bad0e790c4eb48 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Thu, 21 Jul 2022 15:12:57 -0700 Subject: [PATCH 07/12] Reconsidering change to ParentEntityPanel. Adding a check to baseReactSelect.removeSelection to validate that selection was removed. Commenting out previous change for the time being. --- .../components/react/BaseReactSelect.java | 2 + .../ui/entities/ParentEntityEditPanel.java | 44 ++++++++++--------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/org/labkey/test/components/react/BaseReactSelect.java b/src/org/labkey/test/components/react/BaseReactSelect.java index f505fd6136..5e848f8407 100644 --- a/src/org/labkey/test/components/react/BaseReactSelect.java +++ b/src/org/labkey/test/components/react/BaseReactSelect.java @@ -259,6 +259,8 @@ public T removeSelection(String value) removeBtn.click(); getWrapper().shortWait().until(ExpectedConditions.stalenessOf(removeBtn)); + waitFor(()->!getSelections().contains(value), String.format("Failed to remove selection '%s'.", value), WAIT_FOR_JAVASCRIPT); + return getThis(); } diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index f9e4f516c2..42f869ab52 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -361,12 +361,15 @@ public ParentEntityEditPanel addParents(String typeName, List parentIds) for (String id : parentIds) { - int selCount = selectParent.getSelections().size(); +// int selCount = selectParent.getSelections().size(); selectParent.typeAheadSelect(id); - // Validate that the parents were indeed added. - WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, - String.format("Did not successfully add parent %s from %s.", id, typeName), 1_000); +// // Original: +// WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, 500); +// +// // Change: +// WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, +// String.format("Did not successfully add parent %s from %s.", id, typeName), 1_000); } return this; @@ -426,22 +429,23 @@ public ParentEntityEditPanel removeEntityType(String typeName) public ParentEntityEditPanel removeParent(String parentEntity, String parentId) { - - // The ReactSelect does not always reliably remove a selected item. If it did not successfully do it on the first - // try, try again until it is gone or the time limit is hit. - WebDriverWrapper.waitFor(()-> - { - // Guard against react selector being in a 'Loading...' state. - WebDriverWrapper.waitFor(()->getParent(parentEntity).getComponentElement().isDisplayed(), - String.format("Selector for parents from '%s' is not visible.", parentEntity), 1_000); - - // Remove the parent. - getParent(parentEntity).removeSelection(parentId); - - // Verify that the parent has been removed. - return !getParent(parentEntity).getSelections().contains(parentId); - }, - String.format("Parent %s / %s was not removed.", parentEntity, parentId), 1_000); + getParent(parentEntity).removeSelection(parentId); + +// // The ReactSelect does not always reliably remove a selected item. If it did not successfully do it on the first +// // try, try again until it is gone or the time limit is hit. +// WebDriverWrapper.waitFor(()-> +// { +// // Guard against react selector being in a 'Loading...' state. +// WebDriverWrapper.waitFor(()->getParent(parentEntity).getComponentElement().isDisplayed(), +// String.format("Selector for parents from '%s' is not visible.", parentEntity), 1_000); +// +// // Remove the parent. +// getParent(parentEntity).removeSelection(parentId); +// +// // Verify that the parent has been removed. +// return !getParent(parentEntity).getSelections().contains(parentId); +// }, +// String.format("Parent %s / %s was not removed.", parentEntity, parentId), 1_000); return this; } From b09cca0695e219f3f0cc0a7fa78aaace63ea0b25 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Thu, 21 Jul 2022 15:55:18 -0700 Subject: [PATCH 08/12] Removed changes that were commented out. Make check for BaseReactSelect.removeSelection to not check staleness of element, only check selection list. Update check in FilteringReactSelect.typeAheadSelect that value was added. (Make sure other items were not removed). Implemented some linter suggestions in FilteringReactSelect. --- .../components/react/BaseReactSelect.java | 2 -- .../react/FilteringReactSelect.java | 20 +++++++++------ .../ui/entities/ParentEntityEditPanel.java | 25 ------------------- 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/src/org/labkey/test/components/react/BaseReactSelect.java b/src/org/labkey/test/components/react/BaseReactSelect.java index 5e848f8407..3838f345fc 100644 --- a/src/org/labkey/test/components/react/BaseReactSelect.java +++ b/src/org/labkey/test/components/react/BaseReactSelect.java @@ -257,8 +257,6 @@ public T removeSelection(String value) var removeBtn = Locators.removeMultiSelectValueButton(value).waitForElement(getComponentElement(), 1_500); removeBtn.click(); - getWrapper().shortWait().until(ExpectedConditions.stalenessOf(removeBtn)); - waitFor(()->!getSelections().contains(value), String.format("Failed to remove selection '%s'.", value), WAIT_FOR_JAVASCRIPT); return getThis(); diff --git a/src/org/labkey/test/components/react/FilteringReactSelect.java b/src/org/labkey/test/components/react/FilteringReactSelect.java index c4ad9e03a0..ff4ba2e2a8 100644 --- a/src/org/labkey/test/components/react/FilteringReactSelect.java +++ b/src/org/labkey/test/components/react/FilteringReactSelect.java @@ -15,6 +15,8 @@ import org.openqa.selenium.support.ui.FluentWait; import java.time.Duration; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import static org.labkey.test.BaseWebDriverTest.WAIT_FOR_JAVASCRIPT; @@ -28,7 +30,7 @@ public FilteringReactSelect(WebElement element, WebDriver driver) super(element, driver); } - static public SearchingReactSelectFinder finder(WebDriver driver) + public static SearchingReactSelectFinder finder(WebDriver driver) { return new SearchingReactSelectFinder(driver); } @@ -53,8 +55,11 @@ public FilteringReactSelect typeAheadSelect(String value, String optionText, Str scrollIntoView(); open(); - var elementToClick = ReactSelect.Locators.options.containing(optionText); - var elementToWaitFor = getValueLabelLocator().containing(selectedOptionLabel); + // Will be used later to check that value was added. + List expectedSelections = new ArrayList<>(getSelections()); + expectedSelections.add(value); + + var elementToClick = BaseReactSelect.Locators.options.containing(optionText); List options = setFilter(value); @@ -100,8 +105,9 @@ public FilteringReactSelect typeAheadSelect(String value, String optionText, Str getWrapper().fireEvent(elementCache().input, WebDriverWrapper.SeleniumEvent.blur); } - WebDriverWrapper.waitFor(()-> elementToWaitFor.findElementOrNull(getComponentElement()) != null, - () -> "Expected selection [" + elementToWaitFor.getLoggableDescription() + "] was not found. Selected value(s) are:" + getSelections(), + // Sometimes adding a new selection will replace an existing selection. Check to make sure that doesn't happen. + WebDriverWrapper.waitFor(()-> new HashSet<>(getSelections()).containsAll(expectedSelections), + String.format("Selections not as expected after addin '%s'. Expected: %s Actual: %s", value, expectedSelections, getSelections()), WAIT_FOR_JAVASCRIPT); close(); @@ -167,8 +173,8 @@ private List setFilter(String value) long filterStart = System.currentTimeMillis(); WebDriverWrapper.waitFor(()-> { List options = elementCache().getOptions(); - return options.size() > 0 && - !isLoading() || options.stream().anyMatch((a)-> a.getText().contains(value)); + return !options.isEmpty() && + !isLoading() || options.stream().anyMatch(a-> a.getText().contains(value)); }, WAIT_FOR_JAVASCRIPT); long elapsed = System.currentTimeMillis() - filterStart; getWrapper().log("It took [" + elapsed + "] msec to filter options (seeking {"+value+"}) in filtering select"); diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index 42f869ab52..98176122e0 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -361,15 +361,7 @@ public ParentEntityEditPanel addParents(String typeName, List parentIds) for (String id : parentIds) { -// int selCount = selectParent.getSelections().size(); selectParent.typeAheadSelect(id); - -// // Original: -// WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, 500); -// -// // Change: -// WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, -// String.format("Did not successfully add parent %s from %s.", id, typeName), 1_000); } return this; @@ -430,23 +422,6 @@ public ParentEntityEditPanel removeEntityType(String typeName) public ParentEntityEditPanel removeParent(String parentEntity, String parentId) { getParent(parentEntity).removeSelection(parentId); - -// // The ReactSelect does not always reliably remove a selected item. If it did not successfully do it on the first -// // try, try again until it is gone or the time limit is hit. -// WebDriverWrapper.waitFor(()-> -// { -// // Guard against react selector being in a 'Loading...' state. -// WebDriverWrapper.waitFor(()->getParent(parentEntity).getComponentElement().isDisplayed(), -// String.format("Selector for parents from '%s' is not visible.", parentEntity), 1_000); -// -// // Remove the parent. -// getParent(parentEntity).removeSelection(parentId); -// -// // Verify that the parent has been removed. -// return !getParent(parentEntity).getSelections().contains(parentId); -// }, -// String.format("Parent %s / %s was not removed.", parentEntity, parentId), 1_000); - return this; } From 4952ef6b3f8436a9a25eae1fef5ec1bf44e83381 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Thu, 21 Jul 2022 21:47:09 -0700 Subject: [PATCH 09/12] Rolling back changes made to FilteringReactSelect. --- .../react/FilteringReactSelect.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/org/labkey/test/components/react/FilteringReactSelect.java b/src/org/labkey/test/components/react/FilteringReactSelect.java index ff4ba2e2a8..c4ad9e03a0 100644 --- a/src/org/labkey/test/components/react/FilteringReactSelect.java +++ b/src/org/labkey/test/components/react/FilteringReactSelect.java @@ -15,8 +15,6 @@ import org.openqa.selenium.support.ui.FluentWait; import java.time.Duration; -import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import static org.labkey.test.BaseWebDriverTest.WAIT_FOR_JAVASCRIPT; @@ -30,7 +28,7 @@ public FilteringReactSelect(WebElement element, WebDriver driver) super(element, driver); } - public static SearchingReactSelectFinder finder(WebDriver driver) + static public SearchingReactSelectFinder finder(WebDriver driver) { return new SearchingReactSelectFinder(driver); } @@ -55,11 +53,8 @@ public FilteringReactSelect typeAheadSelect(String value, String optionText, Str scrollIntoView(); open(); - // Will be used later to check that value was added. - List expectedSelections = new ArrayList<>(getSelections()); - expectedSelections.add(value); - - var elementToClick = BaseReactSelect.Locators.options.containing(optionText); + var elementToClick = ReactSelect.Locators.options.containing(optionText); + var elementToWaitFor = getValueLabelLocator().containing(selectedOptionLabel); List options = setFilter(value); @@ -105,9 +100,8 @@ public FilteringReactSelect typeAheadSelect(String value, String optionText, Str getWrapper().fireEvent(elementCache().input, WebDriverWrapper.SeleniumEvent.blur); } - // Sometimes adding a new selection will replace an existing selection. Check to make sure that doesn't happen. - WebDriverWrapper.waitFor(()-> new HashSet<>(getSelections()).containsAll(expectedSelections), - String.format("Selections not as expected after addin '%s'. Expected: %s Actual: %s", value, expectedSelections, getSelections()), + WebDriverWrapper.waitFor(()-> elementToWaitFor.findElementOrNull(getComponentElement()) != null, + () -> "Expected selection [" + elementToWaitFor.getLoggableDescription() + "] was not found. Selected value(s) are:" + getSelections(), WAIT_FOR_JAVASCRIPT); close(); @@ -173,8 +167,8 @@ private List setFilter(String value) long filterStart = System.currentTimeMillis(); WebDriverWrapper.waitFor(()-> { List options = elementCache().getOptions(); - return !options.isEmpty() && - !isLoading() || options.stream().anyMatch(a-> a.getText().contains(value)); + return options.size() > 0 && + !isLoading() || options.stream().anyMatch((a)-> a.getText().contains(value)); }, WAIT_FOR_JAVASCRIPT); long elapsed = System.currentTimeMillis() - filterStart; getWrapper().log("It took [" + elapsed + "] msec to filter options (seeking {"+value+"}) in filtering select"); From 446378075922ac8fb989efab705fbd3eafe82d56 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Fri, 22 Jul 2022 08:31:16 -0700 Subject: [PATCH 10/12] Revert all changes to ParentEntityEditPanel. --- .../test/components/ui/entities/ParentEntityEditPanel.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java index 98176122e0..d71a19271a 100644 --- a/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java +++ b/src/org/labkey/test/components/ui/entities/ParentEntityEditPanel.java @@ -361,7 +361,9 @@ public ParentEntityEditPanel addParents(String typeName, List parentIds) for (String id : parentIds) { + int selCount = selectParent.getSelections().size(); selectParent.typeAheadSelect(id); + WebDriverWrapper.waitFor(()-> selectParent.getSelections().size() > selCount, 500); } return this; From 7a45762bc91dd1bd4db94cdcdc7b31673b6960d7 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Fri, 22 Jul 2022 14:32:47 -0700 Subject: [PATCH 11/12] Trying to make delete a little more reliable. --- .../labkey/test/components/react/BaseReactSelect.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/org/labkey/test/components/react/BaseReactSelect.java b/src/org/labkey/test/components/react/BaseReactSelect.java index 3838f345fc..ecf91c590f 100644 --- a/src/org/labkey/test/components/react/BaseReactSelect.java +++ b/src/org/labkey/test/components/react/BaseReactSelect.java @@ -255,8 +255,15 @@ public T removeSelection(String value) scrollIntoView(); - var removeBtn = Locators.removeMultiSelectValueButton(value).waitForElement(getComponentElement(), 1_500); + WebElement removeBtn = Locators.removeMultiSelectValueButton(value).findWhenNeeded(getComponentElement()); removeBtn.click(); + + // Move the mouse away from the selected item. + getWrapper().mouseOver(Locators.selectContainer()); + + getWrapper().shortWait().until(ExpectedConditions.stalenessOf(removeBtn)); + + // Validate that the selected item really was removed. waitFor(()->!getSelections().contains(value), String.format("Failed to remove selection '%s'.", value), WAIT_FOR_JAVASCRIPT); return getThis(); From 615614db2cba98a8a1b09eb516674a0ababb4e64 Mon Sep 17 00:00:00 2001 From: labkey-danield Date: Fri, 22 Jul 2022 16:41:46 -0700 Subject: [PATCH 12/12] Another attempt to make delete more reliable. --- src/org/labkey/test/components/react/BaseReactSelect.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/org/labkey/test/components/react/BaseReactSelect.java b/src/org/labkey/test/components/react/BaseReactSelect.java index ecf91c590f..905d53b5c0 100644 --- a/src/org/labkey/test/components/react/BaseReactSelect.java +++ b/src/org/labkey/test/components/react/BaseReactSelect.java @@ -258,12 +258,10 @@ public T removeSelection(String value) WebElement removeBtn = Locators.removeMultiSelectValueButton(value).findWhenNeeded(getComponentElement()); removeBtn.click(); - // Move the mouse away from the selected item. - getWrapper().mouseOver(Locators.selectContainer()); - getWrapper().shortWait().until(ExpectedConditions.stalenessOf(removeBtn)); // Validate that the selected item really was removed. + WebDriverWrapper.sleep(500); waitFor(()->!getSelections().contains(value), String.format("Failed to remove selection '%s'.", value), WAIT_FOR_JAVASCRIPT); return getThis();