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/react/MultiMenu.java b/src/org/labkey/test/components/react/MultiMenu.java
index fab4d88f9c..fd5e9f7800 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)
@@ -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/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();
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);
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);
}
}
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");
}
}
diff --git a/src/org/labkey/test/components/ui/search/SampleFinder.java b/src/org/labkey/test/components/ui/search/SampleFinder.java
index ed79b02b0c..96d5901277 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().savedSearchesButton);
}
- public BootstrapMenu getSaveSearchDropdownBtn()
+ public MultiMenu getSaveSearchDropdownBtn()
{
- return elementCache().saveViewDropdownBtn;
+ return elementCache().saveDropdown;
}
/**
@@ -233,21 +234,13 @@ 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 MultiMenu saveDropdown = new MultiMenu.MultiMenuFinder(getDriver()).withClass("split-button-dropdown").findWhenNeeded(this);
- 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 saveViewsDropdown()
- {
- return Locator.tagWithAttributeContaining("button", "id", "samplefinder-savedsearch-menu").findElement(this);
- }
+ final WebElement savedSearchesButton = savedSearchesButtonLoc.findWhenNeeded(this);
+ final WebElement savedSearchesContainer = Locator.byClass("dropdown").withChild(savedSearchesButtonLoc).refindWhenNeeded(this);
}
public class SavedSearchesMenu extends BootstrapMenu