From 00a7bf16a47a299472f9b132a7b074690e93da0f Mon Sep 17 00:00:00 2001 From: alanv Date: Thu, 16 Oct 2025 16:48:44 -0500 Subject: [PATCH 1/3] Add support for multiple charts at a time --- .../test/components/html/BootstrapMenu.java | 5 +++ .../components/react/QueryChartDialog.java | 6 ++- .../components/react/QueryChartPanel.java | 7 +++- .../test/components/ui/grids/QueryGrid.java | 41 ++++++++++++++++--- 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/org/labkey/test/components/html/BootstrapMenu.java b/src/org/labkey/test/components/html/BootstrapMenu.java index 8781ac0716..402b81df38 100644 --- a/src/org/labkey/test/components/html/BootstrapMenu.java +++ b/src/org/labkey/test/components/html/BootstrapMenu.java @@ -118,6 +118,11 @@ public void clickSubMenu(boolean wait, @LoggedParam String ... subMenuLabels) clickSubMenu(wait ? getWrapper().getDefaultWaitForPage() : 0, subMenuLabels); } + public boolean menuItemIsDisabled(String text) + { + return findDisabledMenuItemOrNull(text) != null; + } + @Override protected Locator getToggleLocator() { diff --git a/src/org/labkey/test/components/react/QueryChartDialog.java b/src/org/labkey/test/components/react/QueryChartDialog.java index cc028eae8f..3782d5396f 100644 --- a/src/org/labkey/test/components/react/QueryChartDialog.java +++ b/src/org/labkey/test/components/react/QueryChartDialog.java @@ -394,8 +394,9 @@ public QueryChartPanel clickCreateChart() { WebDriverWrapper.waitFor(this::isCreateChartButtonEnabled, "the create chart button did not become enabled", 2000); + String name = getName(); dismiss("Create Chart"); - return _queryGrid.getChartPanel(); + return _queryGrid.getChartPanel(name); } /* @@ -405,8 +406,9 @@ public QueryChartPanel clickSaveChart() { WebDriverWrapper.waitFor(this::isSaveChartButtonEnabled, "the Save chart button did not become enabled", 2000); + String name = getName(); dismiss("Save Chart"); - return _queryGrid.getChartPanel(); + return _queryGrid.getChartPanel(name); } /* diff --git a/src/org/labkey/test/components/react/QueryChartPanel.java b/src/org/labkey/test/components/react/QueryChartPanel.java index 6f4b856508..f55810846c 100644 --- a/src/org/labkey/test/components/react/QueryChartPanel.java +++ b/src/org/labkey/test/components/react/QueryChartPanel.java @@ -100,11 +100,13 @@ public static class QueryChartPanelFinder extends WebDriverComponentFinder menuItems = elementCache().chartsMenu.findVisibleMenuItems(); + + Optional menuItem = menuItems.stream().filter(item -> item.getText().contains(name)).findFirst(); + + if (menuItem.isEmpty()) { + throw new NoSuchElementException(String.format("Could not find chart menu item %s", name)); + } + + WebElement checkbox = menuItem.get().findElement(Locator.byClass("chart-menu-checkbox")); + + return checkbox.getAttribute("class").contains("fa-check-square"); + } + /* - gets a chart panel that is already being shown + gets a chart panel that is already being shown for a given chart name */ - public QueryChartPanel getChartPanel() + public QueryChartPanel getChartPanel(String name) { - return new QueryChartPanel.QueryChartPanelFinder(getDriver(), this).waitFor(this); + return new QueryChartPanel.QueryChartPanelFinder(getDriver(), this, name).waitFor(this); } public WebElement showRReport(String reportName) @@ -743,9 +772,9 @@ public WebElement showRReport(String reportName) return elementCache().rReport(); } - public void closeChart() + public void closeChart(String name) { - getChartPanel().clickClose(); + getChartPanel(name).clickClose(); } @Override From 4dc8b11ac508a7eb743445c18f298c9f578dccb1 Mon Sep 17 00:00:00 2001 From: alanv Date: Thu, 16 Oct 2025 16:52:46 -0500 Subject: [PATCH 2/3] QueryChartPanelFinder: rename title to name it's more consistent --- src/org/labkey/test/components/react/QueryChartPanel.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/org/labkey/test/components/react/QueryChartPanel.java b/src/org/labkey/test/components/react/QueryChartPanel.java index f55810846c..53c67f2005 100644 --- a/src/org/labkey/test/components/react/QueryChartPanel.java +++ b/src/org/labkey/test/components/react/QueryChartPanel.java @@ -100,13 +100,13 @@ public static class QueryChartPanelFinder extends WebDriverComponentFinder Date: Mon, 20 Oct 2025 10:38:10 -0500 Subject: [PATCH 3/3] PR feedback --- src/org/labkey/test/components/html/BootstrapMenu.java | 4 ++++ src/org/labkey/test/components/ui/grids/QueryGrid.java | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/org/labkey/test/components/html/BootstrapMenu.java b/src/org/labkey/test/components/html/BootstrapMenu.java index 402b81df38..a4e5ee3270 100644 --- a/src/org/labkey/test/components/html/BootstrapMenu.java +++ b/src/org/labkey/test/components/html/BootstrapMenu.java @@ -20,6 +20,7 @@ import org.labkey.test.components.react.BaseBootstrapMenu; import org.labkey.test.util.LogMethod; import org.labkey.test.util.LoggedParam; +import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -120,6 +121,9 @@ public void clickSubMenu(boolean wait, @LoggedParam String ... subMenuLabels) public boolean menuItemIsDisabled(String text) { + if (findVisibleMenuItemOrNull(text) == null) + throw new NoSuchElementException("Menu item not found: " + text); + return findDisabledMenuItemOrNull(text) != null; } diff --git a/src/org/labkey/test/components/ui/grids/QueryGrid.java b/src/org/labkey/test/components/ui/grids/QueryGrid.java index 5528511436..8569b1a8c0 100644 --- a/src/org/labkey/test/components/ui/grids/QueryGrid.java +++ b/src/org/labkey/test/components/ui/grids/QueryGrid.java @@ -732,8 +732,7 @@ public QueryChartDialog createChart() public boolean createChartIsDisabled() { - elementCache().chartsMenu.expand(); - return elementCache().chartsMenu.menuItemIsDisabled("Create Chart"); + return chartIsDisabled("Create Chart"); } public boolean chartIsDisabled(String name)