Skip to content

Commit 9fe8ef4

Browse files
committed
Add retry to ProjectMenu.open
1 parent a34e1c1 commit 9fe8ef4

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

src/org/labkey/test/components/core/ProjectMenu.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.labkey.test.components.core;
1717

18+
import org.apache.commons.lang3.StringUtils;
1819
import org.labkey.test.Locator;
1920
import org.labkey.test.WebDriverWrapper;
2021
import org.labkey.test.components.Component;
@@ -28,6 +29,7 @@
2829

2930
import java.util.List;
3031

32+
import static org.labkey.test.Locators.loadingSpinner;
3133
import static org.labkey.test.WebDriverWrapper.WAIT_FOR_JAVASCRIPT;
3234

3335
/**
@@ -68,20 +70,27 @@ public String getCurrentProject()
6870

6971
private boolean isOpen()
7072
{
71-
return elementCache().menuContainer.getAttribute("class").contains("open");
73+
return StringUtils.trimToEmpty(elementCache().menuContainer.getAttribute("class")).contains("open") &&
74+
!loadingSpinner.existsIn(elementCache().menuContainer);
7275
}
7376

7477
public ProjectMenu open()
7578
{
7679
if (!isOpen())
7780
{
78-
getWrapper().executeScript("window.scrollTo(0,0);");
79-
if (getWrapper().isElementPresent(Locator.css("li.dropdown.open > .lk-custom-dropdown-menu")))
80-
getWrapper().mouseOver(elementCache().menuToggle); // Just need to hover if another menu is already open
81-
else
82-
elementCache().menuToggle.click();
83-
WebDriverWrapper.waitFor(this::isOpen, "Project menu didn't open", 2000);
84-
getWrapper().waitForElement(Locator.tagWithClass("div", "folder-nav"));
81+
Runnable openMenu = () -> {
82+
getWrapper().executeScript("window.scrollTo(0,0);");
83+
if (getWrapper().isElementPresent(Locator.css("li.dropdown.open > .lk-custom-dropdown-menu")))
84+
getWrapper().mouseOver(elementCache().menuToggle); // Just need to hover if another menu is already open
85+
else
86+
elementCache().menuToggle.click();
87+
WebDriverWrapper.waitFor(this::isOpen, "Project menu didn't open", 2000);
88+
};
89+
openMenu.run();
90+
if (!Locator.tagWithClass("div", "folder-nav").existsIn(this))
91+
{
92+
openMenu.run(); // retry
93+
}
8594
}
8695
return this;
8796
}
@@ -222,7 +231,7 @@ protected ElementCache newElementCache()
222231
return new ElementCache();
223232
}
224233

225-
protected class ElementCache extends Component.ElementCache
234+
protected class ElementCache extends Component<ElementCache>.ElementCache
226235
{
227236
final WebElement menuContainer = Locators.menuProjectNav.refindWhenNeeded(getComponentElement());
228237
final WebElement menuToggle = Locator.tagWithAttribute("a", "data-toggle", "dropdown").refindWhenNeeded(menuContainer);

0 commit comments

Comments
 (0)