From a2d711afcac19f895ee5d135855be743893a6300 Mon Sep 17 00:00:00 2001 From: alanv Date: Tue, 6 Feb 2024 12:14:48 -0600 Subject: [PATCH 1/4] MultiMenu::doMenuAction - update to account for new DropdownSection --- src/org/labkey/test/components/react/MultiMenu.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/org/labkey/test/components/react/MultiMenu.java b/src/org/labkey/test/components/react/MultiMenu.java index fd5e9f7800..5e0886f21a 100644 --- a/src/org/labkey/test/components/react/MultiMenu.java +++ b/src/org/labkey/test/components/react/MultiMenu.java @@ -61,8 +61,6 @@ public void doMenuAction(@LoggedParam List pathToAction) { expand(); - WebElement menuList = getMenuList(); - for (int i = 0; i < pathToAction.size(); i++) { Assert.assertFalse("Menu item not enabled.", isMenuItemDisabled(pathToAction.get(i))); @@ -72,8 +70,8 @@ public void doMenuAction(@LoggedParam List pathToAction) if (i < pathToAction.size() - 1) { // Everything in the pathToAction should contain a sub menu except possibly the last item. - Assert.assertTrue("Item in menu path '" + pathToAction.get(i) + "' does not contain a sub-menu.", menuItem.getAttribute("class").contains("dropdown-submenu")); - if(!Locator.xpath("./i").findElement(menuItem).getAttribute("class").contains("fa-chevron-up")) + Assert.assertTrue("Item in menu path '" + pathToAction.get(i) + "' does not contain a sub-menu.", menuItem.getAttribute("class").contains("dropdown-section-toggle")); + if(!Locator.byClass("fa").findElement(menuItem).getAttribute("class").contains("fa-chevron-up")) { // This is a sub-menu item, but click it only if the sub-menu is not expanded. menuItem.click(); From c096cb01d9cab6bf3938ea2ac30c4e8d7d1fd4d1 Mon Sep 17 00:00:00 2001 From: alanv Date: Tue, 6 Feb 2024 13:45:43 -0600 Subject: [PATCH 2/4] MultiMenu: Fix expandAll --- src/org/labkey/test/components/react/MultiMenu.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/components/react/MultiMenu.java b/src/org/labkey/test/components/react/MultiMenu.java index 5e0886f21a..695b1e45c7 100644 --- a/src/org/labkey/test/components/react/MultiMenu.java +++ b/src/org/labkey/test/components/react/MultiMenu.java @@ -154,11 +154,13 @@ private void expandAll() for (WebElement menuItem : menuItems) { menuItem = Locator.xpath("..").findElement(menuItem); // Up a level - Optional expando = Locator.xpath("./i").withClass("fa-chevron-down").findOptionalElement(menuItem); + Optional expando = Locator.byClass("fa-chevron-down").findOptionalElement(menuItem); if (expando.isPresent()) { expando.get().click(); - Locator.tagWithClass("ul", "well").waitForElement(menuItem, 1_000); + // Note: if we really do need to wait for the items to appear we can probably wait for elements with + // class "dropdown-section__menu-item", we'll want to track how many we already have and check that the + // number has increased, since nothing is nested, everything is siblings. } } } From 9a9df62e1422c44bd2822d03908d5c1033e449c3 Mon Sep 17 00:00:00 2001 From: alanv Date: Tue, 6 Feb 2024 14:00:11 -0600 Subject: [PATCH 3/4] DropdownButtonGroup: Update buttonGroupWithClass to account for DOM changes --- src/org/labkey/test/components/react/DropdownButtonGroup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/labkey/test/components/react/DropdownButtonGroup.java b/src/org/labkey/test/components/react/DropdownButtonGroup.java index fd795be942..9e10be025e 100644 --- a/src/org/labkey/test/components/react/DropdownButtonGroup.java +++ b/src/org/labkey/test/components/react/DropdownButtonGroup.java @@ -254,7 +254,7 @@ static public Locator.XPathLocator buttonGroupWithId(String Id) static public Locator.XPathLocator buttonGroupWithClass(String cls) { - return Locator.tagWithClass("div", "dropdown").withChild(Locators.toggleAnchor().withClass(cls)); + return Locator.tagWithClass("div", "dropdown").withClass(cls); } } From 9b0086c3437446dbd55521f640822994f11ad8d3 Mon Sep 17 00:00:00 2001 From: alanv Date: Wed, 7 Feb 2024 15:42:37 -0600 Subject: [PATCH 4/4] MultiMenu: Update getItemsUnderHeading to account for new DOM structure --- .../test/components/react/MultiMenu.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/org/labkey/test/components/react/MultiMenu.java b/src/org/labkey/test/components/react/MultiMenu.java index 695b1e45c7..effbeb7400 100644 --- a/src/org/labkey/test/components/react/MultiMenu.java +++ b/src/org/labkey/test/components/react/MultiMenu.java @@ -189,15 +189,31 @@ public List getMenuText() public List getItemsUnderHeading(String heading) { expandAll(); + boolean headingFound = false; + List items = new ArrayList<>(); + List listItems = Locator.tag("li").findElements(this); - WebElement submenu = Locator.byClass("dropdown-header").withText(heading) - .followingSibling("li").withClass("dropdown-submenu").findElement(this); - List menuList = Locator.tagWithAttribute("a", "role", "menuitem").findElements(submenu); - List menuText = getWrapper().getTexts(menuList); + for (WebElement item : listItems) + { + String className = item.getAttribute("class"); + String text = item.getText().trim(); + + if (className.contains("dropdown-header") && text.equalsIgnoreCase(heading)) + headingFound = true; + + // Once we've found our header we know that all dropdown-section__menu-item elements belong to the heading + // we are interested in + if (headingFound && className.contains("dropdown-section__menu-item")) + items.add(text); + + // Once we hit a divider we're done looking at menu items related to the heading, so we can stop iterating + if (headingFound && className.contains("divider")) + break; + } collapse(); - return menuText; + return items; } public String getButtonText()