From 539a5fc6889d3e75b7c1c4869e420f5b46fe6fb5 Mon Sep 17 00:00:00 2001 From: alanv Date: Mon, 22 Jan 2024 14:47:52 -0600 Subject: [PATCH 1/8] GridBar: expect class name for aliquot view selector --- src/org/labkey/test/components/ui/grids/GridBar.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/org/labkey/test/components/ui/grids/GridBar.java b/src/org/labkey/test/components/ui/grids/GridBar.java index 079ac01db9..d17cb65349 100644 --- a/src/org/labkey/test/components/ui/grids/GridBar.java +++ b/src/org/labkey/test/components/ui/grids/GridBar.java @@ -417,8 +417,7 @@ protected MultiMenu findMenu(String buttonText) return menus.get(buttonText); } - protected final BootstrapMenu aliquotView = BootstrapMenu.finder(getDriver()).locatedBy( - Locator.tagWithAttributeContaining("button", "id", "aliquotviewselector").parent()).findWhenNeeded(this); + protected final MultiMenu aliquotView = new MultiMenu.MultiMenuFinder(getDriver()).withButtonClass("aliquot-view-selector").findWhenNeeded(this); protected final Input searchBox = Input.Input(Locator.tagWithClass("input", "grid-panel__search-input"), getDriver()).findWhenNeeded(this); protected final WebElement clearSearchButton = Locator.byClass("fa-remove").findWhenNeeded(this); From 687bedb373bd5d084575c6af24132a6d001e2d07 Mon Sep 17 00:00:00 2001 From: alanv Date: Mon, 22 Jan 2024 16:06:30 -0600 Subject: [PATCH 2/8] Pager: try to fix getPageSize locators --- src/org/labkey/test/components/ui/Pager.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/org/labkey/test/components/ui/Pager.java b/src/org/labkey/test/components/ui/Pager.java index c9dc948f8c..dd0740a53b 100644 --- a/src/org/labkey/test/components/ui/Pager.java +++ b/src/org/labkey/test/components/ui/Pager.java @@ -76,11 +76,10 @@ public int getPageSize() // only works on GridPanel // Changing the jumpToDropdown button from the deprecated DropdownButtonGroup class to a MultiMenu type has changed // the way that various text from the control is gathered. Getting the current page size now requires that the dropdown // be expanded and the selected page size found in the list. - elementCache().jumpToDropdown.expand(); - // Find the selected li element in the page size list (//div[@class='grid-panel__button-bar']//ul[contains(@aria-labelledby,'current-page-drop')]//li[@class='active']) - WebElement activeLi = Locator.tagWithAttributeContaining("ul", "aria-labelledby", "current-page-drop").childTag("li").withAttribute("class", "active").findElement(this); + // Find the selected li element in the page size list + WebElement activeLi = Locator.byClass("active").findElement(elementCache().jumpToDropdown); int size = Integer.parseInt(activeLi.getText()); elementCache().jumpToDropdown.collapse(); From f0b367108830f6146e002b36f938dd3d776ba349 Mon Sep 17 00:00:00 2001 From: alanv Date: Mon, 22 Jan 2024 16:07:49 -0600 Subject: [PATCH 3/8] NavBar: fix find-and-search locator --- src/org/labkey/test/components/ui/navigation/NavBar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/labkey/test/components/ui/navigation/NavBar.java b/src/org/labkey/test/components/ui/navigation/NavBar.java index b7caad0286..1e3b54bde1 100644 --- a/src/org/labkey/test/components/ui/navigation/NavBar.java +++ b/src/org/labkey/test/components/ui/navigation/NavBar.java @@ -119,7 +119,7 @@ protected abstract class ElementCache extends Component.ElementCac public WebElement userIcon = Locator.tagWithAttribute("img", "alt", "User Avatar").findWhenNeeded(this); public WebElement projectNameDisplay = Locator.tagWithClass("span", "project-name").findWhenNeeded(this); public Input searchBox = Input.Input(Locator.tagWithClass("input", "navbar__search-input"), getDriver()).findWhenNeeded(this); - public MultiMenu searchMenu = new MultiMenu.MultiMenuFinder(getDriver()).withButtonId("find-and-search-menu").findWhenNeeded(this); + public MultiMenu searchMenu = new MultiMenu.MultiMenuFinder(getDriver()).withButtonClass("navbar__find-and-search-button").findWhenNeeded(this); public final ProductMenu productMenu = ProductMenu.finder(getDriver()).timeout(1000).findWhenNeeded(this); } } From 6185d6e453f5a939793ea36a8ec4dd99ca57a03c Mon Sep 17 00:00:00 2001 From: alanv Date: Mon, 22 Jan 2024 17:38:34 -0600 Subject: [PATCH 4/8] MultiMenu: Work with dropups --- src/org/labkey/test/components/react/MultiMenu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/labkey/test/components/react/MultiMenu.java b/src/org/labkey/test/components/react/MultiMenu.java index fab4d88f9c..0ca098f487 100644 --- a/src/org/labkey/test/components/react/MultiMenu.java +++ b/src/org/labkey/test/components/react/MultiMenu.java @@ -209,7 +209,7 @@ public static abstract class Locators { static public Locator.XPathLocator menuContainer() { - return Locator.tagWithClass("*", "dropdown"); + return Locator.XPathLocator.union(Locator.byClass("dropdown"), Locator.byClass("dropup")); } static public Locator.XPathLocator menuContainer(String text) From dbc47646d69bac5fde3c622b87b58edfb3c02851 Mon Sep 17 00:00:00 2001 From: alanv Date: Tue, 23 Jan 2024 11:05:18 -0600 Subject: [PATCH 5/8] SampleFinder: Update menu locators --- .../test/components/html/BootstrapMenu.java | 2 +- .../components/ui/search/SampleFinder.java | 21 ++++++++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/org/labkey/test/components/html/BootstrapMenu.java b/src/org/labkey/test/components/html/BootstrapMenu.java index aa99e003d2..34556f3fe2 100644 --- a/src/org/labkey/test/components/html/BootstrapMenu.java +++ b/src/org/labkey/test/components/html/BootstrapMenu.java @@ -169,7 +169,7 @@ protected WebElement findVisibleMenuItemOrNull(String text) protected WebElement findDisabledMenuItemOrNull(String text) { - Locator.XPathLocator loc= Locator.xpath("./li/a").withText(text).parent().withClass("disabled"); + Locator.XPathLocator loc = Locator.xpath("./li/a").withText(text).parent().withClass("disabled"); return loc.findElementOrNull(findVisibleMenuPanel()); } } diff --git a/src/org/labkey/test/components/ui/search/SampleFinder.java b/src/org/labkey/test/components/ui/search/SampleFinder.java index ed79b02b0c..4d53720aa6 100644 --- a/src/org/labkey/test/components/ui/search/SampleFinder.java +++ b/src/org/labkey/test/components/ui/search/SampleFinder.java @@ -7,6 +7,7 @@ import org.labkey.test.components.Component; import org.labkey.test.components.WebDriverComponent; import org.labkey.test.components.html.BootstrapMenu; +import org.labkey.test.components.react.MultiMenu; import org.labkey.test.components.ui.grids.TabbedGridPanel; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; @@ -137,12 +138,12 @@ public List getSearchCards() public SavedSearchesMenu getSaveSearchMenu() { - return new SavedSearchesMenu(elementCache().savedViewsMenu().getComponentElement(), getDriver(), elementCache().saveViewsDropdown()); + return new SavedSearchesMenu(elementCache().savedSearchesContainer, getDriver(), elementCache().saveViewsDropdown()); } - public BootstrapMenu getSaveSearchDropdownBtn() + public MultiMenu getSaveSearchDropdownBtn() { - return elementCache().saveViewDropdownBtn; + return elementCache().saveDropdown; } /** @@ -233,19 +234,15 @@ FilterCard findFilterCard(String queryName) final TabbedGridPanel resultsGrid = new TabbedGridPanel.TabbedGridPanelFinder(getDriver()).findWhenNeeded(this); - final BootstrapMenu savedViewsMenu() - { - return BootstrapMenu.finder(getDriver()) - .locatedBy(Locator.tagWithAttributeContaining("button", "id", "samplefinder-savedsearch-menu").parent()) - .waitFor(this); - } + final WebElement splitButton = Locator.byClass("split-button-menu").findWhenNeeded(this); + final MultiMenu saveDropdown = new MultiMenu.MultiMenuFinder(getDriver()).findWhenNeeded(splitButton); - final BootstrapMenu saveViewDropdownBtn = BootstrapMenu.finder(getDriver()).locatedBy( - Locator.tagWithAttributeContaining("button", "id", "save-finderview-dropdown").parent()).findWhenNeeded(this); + final Locator.XPathLocator savedSearchesButtonLoc = Locator.byClass("search-selector"); + final WebElement savedSearchesContainer = Locator.byClass("dropdown").withChild(savedSearchesButtonLoc).findWhenNeeded(this); final WebElement saveViewsDropdown() { - return Locator.tagWithAttributeContaining("button", "id", "samplefinder-savedsearch-menu").findElement(this); + return savedSearchesButtonLoc.findElement(this); } } From 97bad60346551c24606561045801f85af2246552 Mon Sep 17 00:00:00 2001 From: alanv Date: Tue, 23 Jan 2024 11:34:20 -0600 Subject: [PATCH 6/8] SampleFinder: fix issues with stale dropdown element --- .../labkey/test/components/ui/search/SampleFinder.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/org/labkey/test/components/ui/search/SampleFinder.java b/src/org/labkey/test/components/ui/search/SampleFinder.java index 4d53720aa6..35482e0c52 100644 --- a/src/org/labkey/test/components/ui/search/SampleFinder.java +++ b/src/org/labkey/test/components/ui/search/SampleFinder.java @@ -138,7 +138,7 @@ public List getSearchCards() public SavedSearchesMenu getSaveSearchMenu() { - return new SavedSearchesMenu(elementCache().savedSearchesContainer, getDriver(), elementCache().saveViewsDropdown()); + return new SavedSearchesMenu(elementCache().savedSearchesContainer, getDriver(), elementCache().savedSearchesButton); } public MultiMenu getSaveSearchDropdownBtn() @@ -238,13 +238,10 @@ FilterCard findFilterCard(String queryName) final MultiMenu saveDropdown = new MultiMenu.MultiMenuFinder(getDriver()).findWhenNeeded(splitButton); final Locator.XPathLocator savedSearchesButtonLoc = Locator.byClass("search-selector"); - final WebElement savedSearchesContainer = Locator.byClass("dropdown").withChild(savedSearchesButtonLoc).findWhenNeeded(this); - final WebElement saveViewsDropdown() - { - return savedSearchesButtonLoc.findElement(this); - } + final WebElement savedSearchesButton = savedSearchesButtonLoc.findWhenNeeded(this); + final WebElement savedSearchesContainer = Locator.byClass("dropdown").withChild(savedSearchesButtonLoc).refindWhenNeeded(this); } public class SavedSearchesMenu extends BootstrapMenu From 264d73ab66cb7e9064f0cfccd73676db65b1df04 Mon Sep 17 00:00:00 2001 From: alanv Date: Wed, 24 Jan 2024 14:44:05 -0600 Subject: [PATCH 7/8] MultiMenuFinder: Add withClass UserMenu: use MultiMenuFinder.withClass --- src/org/labkey/test/components/react/MultiMenu.java | 7 +++++++ src/org/labkey/test/components/ui/navigation/UserMenu.java | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/org/labkey/test/components/react/MultiMenu.java b/src/org/labkey/test/components/react/MultiMenu.java index 0ca098f487..fd5e9f7800 100644 --- a/src/org/labkey/test/components/react/MultiMenu.java +++ b/src/org/labkey/test/components/react/MultiMenu.java @@ -254,6 +254,13 @@ public MultiMenuFinder withButtonIcon(String iconClass) _locator = Locators.menuContainer().withChild(BootstrapMenu.Locators.dropdownToggle().withChild(Locator.byClass(iconClass))); return this; } + + public MultiMenuFinder withClass(String cls) + { + _locator = MultiMenu.Locators.menuContainer().withClass(cls); + return this; + } + @Override protected MultiMenuFinder getThis() { diff --git a/src/org/labkey/test/components/ui/navigation/UserMenu.java b/src/org/labkey/test/components/ui/navigation/UserMenu.java index 5f81a3b0ac..15fc702e55 100644 --- a/src/org/labkey/test/components/ui/navigation/UserMenu.java +++ b/src/org/labkey/test/components/ui/navigation/UserMenu.java @@ -14,7 +14,7 @@ */ public abstract class UserMenu extends BootstrapMenu { - private static final String MENU_ID = "user-menu-dropdown"; + private static final String MENU_CLASS = "user-dropdown"; protected UserMenu(WebElement element, WebDriver driver) { @@ -23,7 +23,7 @@ protected UserMenu(WebElement element, WebDriver driver) protected static SimpleWebDriverComponentFinder baseMenuFinder(WebDriver driver, BiFunction factory) { - return new MultiMenu.MultiMenuFinder(driver).withButtonId(MENU_ID).wrap(factory); + return new MultiMenu.MultiMenuFinder(driver).withClass(MENU_CLASS).wrap(factory); } // TODO: Placeholder for product update @@ -47,6 +47,6 @@ protected LabKeyPage logout() */ public static Locator appUserMenu() { - return Locator.tagWithId("a", MENU_ID); + return Locator.byClass(MENU_CLASS).childTag("a"); } } From 6b462b83e1a448bbdb95297d753893d95b86929c Mon Sep 17 00:00:00 2001 From: alanv Date: Thu, 25 Jan 2024 13:35:54 -0600 Subject: [PATCH 8/8] SampleFinder: Fix issue with save button locator --- src/org/labkey/test/components/ui/search/SampleFinder.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/org/labkey/test/components/ui/search/SampleFinder.java b/src/org/labkey/test/components/ui/search/SampleFinder.java index 35482e0c52..96d5901277 100644 --- a/src/org/labkey/test/components/ui/search/SampleFinder.java +++ b/src/org/labkey/test/components/ui/search/SampleFinder.java @@ -234,8 +234,7 @@ FilterCard findFilterCard(String queryName) final TabbedGridPanel resultsGrid = new TabbedGridPanel.TabbedGridPanelFinder(getDriver()).findWhenNeeded(this); - final WebElement splitButton = Locator.byClass("split-button-menu").findWhenNeeded(this); - final MultiMenu saveDropdown = new MultiMenu.MultiMenuFinder(getDriver()).findWhenNeeded(splitButton); + final MultiMenu saveDropdown = new MultiMenu.MultiMenuFinder(getDriver()).withClass("split-button-dropdown").findWhenNeeded(this); final Locator.XPathLocator savedSearchesButtonLoc = Locator.byClass("search-selector");