diff --git a/src/org/labkey/test/components/ChartTypeDialog.java b/src/org/labkey/test/components/ChartTypeDialog.java index 7659d89692..d0e91e37c7 100644 --- a/src/org/labkey/test/components/ChartTypeDialog.java +++ b/src/org/labkey/test/components/ChartTypeDialog.java @@ -193,11 +193,15 @@ public ChartTypeDialog setYAxis(String columnName, boolean hasExistingSelection) public ChartTypeDialog setYAxisSide(int measureIndex, YAxisSide side) { - WebElement measureEl = elementCache().Y_FIELD_DISPLAY.index(measureIndex).findElement(this); - if (!measureEl.getAttribute("class").contains("selected")) - { - Locator.byClass("field-selection-text").findElement(measureEl).click(); - } + Locator measureLoc = elementCache().Y_FIELD_DISPLAY.index(measureIndex); + // A click that lands while the dialog is still rendering doesn't select the measure, so retry it + WebDriverWrapper.waitFor(() -> { + WebElement el = measureLoc.findElement(this); + if (!el.getAttribute("class").contains("x4-item-selected")) + Locator.byClass("field-selection-text").findElement(el).click(); + return WebDriverWrapper.waitFor(() -> measureLoc.findElement(this).getAttribute("class").contains("x4-item-selected"), 1_000); + }, "Y axis measure " + measureIndex + " was not selected", 5_000); + WebElement measureEl = measureLoc.findElement(this); WebElement arrow = Locator.tagWithClass("i", "fa-arrow-circle-" + side.name().toLowerCase()).waitForElement(measureEl, 5_000); WebDriverWait quickWait = new WebDriverWait(getWrapper().getDriver(), Duration.ofSeconds(4)); quickWait.until(ExpectedConditions.visibilityOf(arrow)); diff --git a/src/org/labkey/test/util/exp/SampleTypeAPIHelper.java b/src/org/labkey/test/util/exp/SampleTypeAPIHelper.java index 45c1d4d649..e008169a76 100644 --- a/src/org/labkey/test/util/exp/SampleTypeAPIHelper.java +++ b/src/org/labkey/test/util/exp/SampleTypeAPIHelper.java @@ -19,6 +19,7 @@ import org.junit.Assert; import org.labkey.remoteapi.CommandException; import org.labkey.remoteapi.Connection; +import org.labkey.remoteapi.query.ContainerFilter; import org.labkey.remoteapi.query.Filter; import org.labkey.remoteapi.query.SelectRowsCommand; import org.labkey.remoteapi.query.SelectRowsResponse; @@ -201,6 +202,21 @@ public static Map getRowIdsForSamples(String containerPath, Str return rowIds; } + /** + * Row ids of sample types named {@code sampleTypeName} visible from {@code containerPath} under CurrentPlusProjectAndShared. + */ + public static List getSampleTypeRowIds(String containerPath, String sampleTypeName) throws IOException, CommandException + { + SelectRowsCommand cmd = new SelectRowsCommand("exp", "SampleSets"); + cmd.setColumns(List.of("RowId")); + cmd.addFilter("Name", sampleTypeName, Filter.Operator.EQUAL); + cmd.setContainerFilter(ContainerFilter.CurrentPlusProjectAndShared); + + return cmd.execute(WebTestHelper.getRemoteApiConnection(), containerPath).getRows().stream() + .map(row -> Integer.parseInt(row.get("RowId").toString())) + .toList(); + } + /** * Get sample state IDs defined in the specified project/folder. Useful for updating sample status via API * @param containerPath Path to the project/folder where the sample statuses are defined (typically project)