From d7503c49cf3ee083173eb3ebb307344efe221b54 Mon Sep 17 00:00:00 2001 From: ChrisJoosse Date: Tue, 30 Sep 2025 14:37:51 -0700 Subject: [PATCH 1/2] Reference security-category table columns by header text --- .../org/labkey/test/tests/snd/SNDTest.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/snd/test/src/org/labkey/test/tests/snd/SNDTest.java b/snd/test/src/org/labkey/test/tests/snd/SNDTest.java index b28c0e2af..d93c334bd 100644 --- a/snd/test/src/org/labkey/test/tests/snd/SNDTest.java +++ b/snd/test/src/org/labkey/test/tests/snd/SNDTest.java @@ -64,6 +64,7 @@ import org.labkey.test.util.SqlserverOnlyTest; import org.labkey.test.util.StudyHelper; import org.labkey.test.util.core.webdav.WebDavUploadHelper; +import org.openqa.selenium.support.ui.ExpectedConditions; import java.io.File; import java.io.IOException; @@ -2121,6 +2122,12 @@ private void runTestsInAPIFrameWork() assertTextPresent("Complete","Failed tests: 0"); } + private int getPermissionTableColumnIndex(String column) + { + var headersLoc = Locator.id("category-security").descendant(Locator.tagWithClass("th", "group-hdr")); + return getTexts(headersLoc.findElements(getDriver())).indexOf(column) +1; + } + private String getPermissionTableValue(int row, int col) { return ((Locator.XPathLocator)getSimpleTableCell(Locator.id("category-security"), row, col)).child("div").child("a").child("input").findElement(getDriver()) @@ -2173,14 +2180,18 @@ public void categoryPermissionsUI() throws Exception Assertions.assertThat(categoryRows.keySet()).as("Custom categories") .containsExactlyElementsOf(categories); - click(Locator.id("a_all_-3")); // All Categories for Guests + Locator allGuestCategoriesDropdownLoc = Locator.id("a_all_-3"); + shortWait().until(ExpectedConditions.elementToBeClickable(allGuestCategoriesDropdownLoc)); + click(allGuestCategoriesDropdownLoc); // All Categories for Guests clickRoleInOpenDropDown("SND Reader"); + int guestColIndex = getPermissionTableColumnIndex("Guests"); + for (Integer r : categoryRows.values()) { // Wait for setting to propagate Awaitility.await().atMost(Duration.ofSeconds(1)).untilAsserted(() -> - assertEquals("SND Reader", getPermissionTableValue(r, 1))); + assertEquals("SND Reader", getPermissionTableValue(r, guestColIndex))); } findButton("Clear All").click(); @@ -2191,7 +2202,7 @@ public void categoryPermissionsUI() throws Exception Integer row = categoryRows.get(category); String value = getPermissionTableValue(row, 1); assertEquals("None", value); - click(getSimpleTableCell(Locator.id("category-security"), row, 1)); + click(getSimpleTableCell(Locator.id("category-security"), row, guestColIndex)); clickRoleInOpenDropDown(permissions.get(categories.indexOf(category))); } @@ -2200,7 +2211,7 @@ public void categoryPermissionsUI() throws Exception for (String category : categories) { Integer row = categoryRows.get(category); - String value = getPermissionTableValue(row, 1); + String value = getPermissionTableValue(row, guestColIndex); assertEquals(permissions.get(categories.indexOf(category)), value); } From c34a4cf26b95be464a91c3b36651d903b3deafb2 Mon Sep 17 00:00:00 2001 From: ChrisJoosse Date: Wed, 1 Oct 2025 11:16:06 -0700 Subject: [PATCH 2/2] provide useful error/screenshot if column is not found --- snd/test/src/org/labkey/test/tests/snd/SNDTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/snd/test/src/org/labkey/test/tests/snd/SNDTest.java b/snd/test/src/org/labkey/test/tests/snd/SNDTest.java index d93c334bd..d72f6e327 100644 --- a/snd/test/src/org/labkey/test/tests/snd/SNDTest.java +++ b/snd/test/src/org/labkey/test/tests/snd/SNDTest.java @@ -2125,7 +2125,13 @@ private void runTestsInAPIFrameWork() private int getPermissionTableColumnIndex(String column) { var headersLoc = Locator.id("category-security").descendant(Locator.tagWithClass("th", "group-hdr")); - return getTexts(headersLoc.findElements(getDriver())).indexOf(column) +1; + var columnHeaders = getTexts(headersLoc.findElements(getDriver())); + checker().withScreenshot("column_not_found").fatal() + .wrapAssertion(()-> Assertions.assertThat(columnHeaders) + .as(String.format("Column %s not found", column)) + .contains(column)); + + return columnHeaders.indexOf(column) +1; } private String getPermissionTableValue(int row, int col)