From 9b0086c3437446dbd55521f640822994f11ad8d3 Mon Sep 17 00:00:00 2001 From: alanv Date: Wed, 7 Feb 2024 15:42:37 -0600 Subject: [PATCH] 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()