|
15 | 15 | */ |
16 | 16 | package org.labkey.test.components.core; |
17 | 17 |
|
| 18 | +import org.apache.commons.lang3.StringUtils; |
18 | 19 | import org.labkey.test.Locator; |
19 | 20 | import org.labkey.test.WebDriverWrapper; |
20 | 21 | import org.labkey.test.components.Component; |
|
28 | 29 |
|
29 | 30 | import java.util.List; |
30 | 31 |
|
| 32 | +import static org.labkey.test.Locators.loadingSpinner; |
31 | 33 | import static org.labkey.test.WebDriverWrapper.WAIT_FOR_JAVASCRIPT; |
32 | 34 |
|
33 | 35 | /** |
@@ -68,20 +70,27 @@ public String getCurrentProject() |
68 | 70 |
|
69 | 71 | private boolean isOpen() |
70 | 72 | { |
71 | | - return elementCache().menuContainer.getAttribute("class").contains("open"); |
| 73 | + return StringUtils.trimToEmpty(elementCache().menuContainer.getAttribute("class")).contains("open") && |
| 74 | + !loadingSpinner.existsIn(elementCache().menuContainer); |
72 | 75 | } |
73 | 76 |
|
74 | 77 | public ProjectMenu open() |
75 | 78 | { |
76 | 79 | if (!isOpen()) |
77 | 80 | { |
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 | + } |
85 | 94 | } |
86 | 95 | return this; |
87 | 96 | } |
@@ -222,7 +231,7 @@ protected ElementCache newElementCache() |
222 | 231 | return new ElementCache(); |
223 | 232 | } |
224 | 233 |
|
225 | | - protected class ElementCache extends Component.ElementCache |
| 234 | + protected class ElementCache extends Component<ElementCache>.ElementCache |
226 | 235 | { |
227 | 236 | final WebElement menuContainer = Locators.menuProjectNav.refindWhenNeeded(getComponentElement()); |
228 | 237 | final WebElement menuToggle = Locator.tagWithAttribute("a", "data-toggle", "dropdown").refindWhenNeeded(menuContainer); |
|
0 commit comments