From 6b01811582d21178e20df66353da93763dfe6312 Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 8 Dec 2025 08:58:43 -0600 Subject: [PATCH 1/2] QueryChartDialog helpers for color options --- .../components/react/QueryChartDialog.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/org/labkey/test/components/react/QueryChartDialog.java b/src/org/labkey/test/components/react/QueryChartDialog.java index 598be31870..d20bd6275f 100644 --- a/src/org/labkey/test/components/react/QueryChartDialog.java +++ b/src/org/labkey/test/components/react/QueryChartDialog.java @@ -2,6 +2,7 @@ import org.labkey.test.Locator; import org.labkey.test.WebDriverWrapper; +import org.labkey.test.components.ColorPickerInput; import org.labkey.test.components.bootstrap.ModalDialog; import org.labkey.test.components.html.Checkbox; import org.labkey.test.components.html.Input; @@ -577,6 +578,56 @@ public void clickDeleteChart(boolean confirmDelete) } } + public boolean hasFillColorOption() + { + return elementCache().fillColorPicker.isDisplayed(); + } + + public QueryChartDialog setFillColor(String hexColor) + { + return setColor(elementCache().fillColorPicker, hexColor); + } + + public boolean hasLineColorOption() + { + return elementCache().lineColorPicker.isDisplayed(); + } + + public QueryChartDialog setLineColor(String hexColor) + { + return setColor(elementCache().lineColorPicker, hexColor); + } + + public boolean hasPointColorOption() + { + return elementCache().pointColorPicker.isDisplayed(); + } + + public QueryChartDialog setPointColor(String hexColor) + { + return setColor(elementCache().pointColorPicker, hexColor); + } + + private QueryChartDialog setColor(WebElement colorPickerContainer, String hexColor) + { + Locator.tagWithClassContaining("button", "color-picker__button").findElement(colorPickerContainer).click(); + ColorPickerInput colorInput = new ColorPickerInput.ColorPickerInputFinder(getDriver()).findWhenNeeded(); + colorInput.setHexValue(hexColor); + colorPickerContainer.click(); // need to click outside the color picker to close it + return this; + } + + public boolean hasColorPaletteOption() + { + return elementCache().reactSelectByLabel("Color Palette", true) != null; + } + + public QueryChartDialog selectColorPalette(String option) + { + elementCache().reactSelectByLabel("Color Palette").select(option); + return this; + } + @Override protected ElementCache newElementCache() { @@ -602,6 +653,10 @@ protected class ElementCache extends ModalDialog.ElementCache final Checkbox inheritableCheckbox = Checkbox.Checkbox(Locator.input("inheritable")).findWhenNeeded(settingsPanel); final Checkbox fullWidthCheckbox = Checkbox.Checkbox(Locator.input("use-full-width")).findWhenNeeded(settingsPanel); + final WebElement fillColorPicker = Locator.byClass("color-picker").withAttribute("data-name", "boxFillColor").refindWhenNeeded(settingsPanel); + final WebElement lineColorPicker = Locator.byClass("color-picker").withAttribute("data-name", "lineColor").refindWhenNeeded(settingsPanel); + final WebElement pointColorPicker = Locator.byClass("color-picker").withAttribute("data-name", "pointFillColor").refindWhenNeeded(settingsPanel); + public ReactSelect reactSelectByLabel(String label) { return reactSelectByLabel(label, false); From 63748f399fdaaab5991dfdff3f62dd33b8df48f2 Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 8 Dec 2025 13:08:02 -0600 Subject: [PATCH 2/2] QueryChartDialog helpers for color options --- .../test/components/react/QueryChartDialog.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/org/labkey/test/components/react/QueryChartDialog.java b/src/org/labkey/test/components/react/QueryChartDialog.java index d20bd6275f..7938f93ab8 100644 --- a/src/org/labkey/test/components/react/QueryChartDialog.java +++ b/src/org/labkey/test/components/react/QueryChartDialog.java @@ -628,6 +628,22 @@ public QueryChartDialog selectColorPalette(String option) return this; } + public boolean hasLineColorAndStyleSelectOption() + { + return elementCache().reactSelectByLabel("Line Color and Style", true) != null; + } + + public QueryChartDialog selectLineColorAndStyleOption(String option, String hexColor) + { + var seriesDropdown = elementCache().reactSelectByLabel("Line Color and Style"); + // series select component uses a custom option renderer + seriesDropdown.setOptionLocator((String type) -> Locator.byClass("chart-builder-type-option").withAttribute("data-series-shape", type)); + seriesDropdown.select(option); + if (hexColor != null) + setColor(elementCache().seriesColorPicker, hexColor); + return this; + } + @Override protected ElementCache newElementCache() { @@ -656,6 +672,7 @@ protected class ElementCache extends ModalDialog.ElementCache final WebElement fillColorPicker = Locator.byClass("color-picker").withAttribute("data-name", "boxFillColor").refindWhenNeeded(settingsPanel); final WebElement lineColorPicker = Locator.byClass("color-picker").withAttribute("data-name", "lineColor").refindWhenNeeded(settingsPanel); final WebElement pointColorPicker = Locator.byClass("color-picker").withAttribute("data-name", "pointFillColor").refindWhenNeeded(settingsPanel); + final WebElement seriesColorPicker = Locator.byClass("color-picker").withAttribute("data-name", "seriesColor").refindWhenNeeded(settingsPanel); public ReactSelect reactSelectByLabel(String label) {