Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
f28d50e
test: convert BlocksPageContentValidation tests to JUnit
3ashour Jul 17, 2026
a16e9fe
test: Adding TemplateCreationUtils and DataBaseCreationUtils
3ashour Jul 20, 2026
a3d1282
test: convert ateDragAndDropAreaChart tests to JUnit
3ashour Jul 20, 2026
966fc07
test : Convert cucumber test steps into JUnit tests in CodeAppFilesTe…
sarahzara Jul 20, 2026
1c24426
test : Convert cucumber test steps into Junit tests in CodeAppSetting…
sarahzara Jul 20, 2026
7c16770
test: convert CreateAndValidateLayers tests to JUnit and update Layer…
3ashour Jul 23, 2026
fcbb3b1
test: Cleaning DataBaseCreationUtils.java
3ashour Jul 23, 2026
1f6fa31
test: convert CreateAppUsingDragAndDropCharts.java tests to JUnit
3ashour Jul 23, 2026
9f52a00
test : convert drag and drop template tests to Junit .
sarahzara Jul 24, 2026
c47b8a2
Revert "test : convert drag and drop template tests to Junit ."
sarahzara Jul 24, 2026
db4f446
test : add Notebook Data Filters Tests for unfiltered , filter and ne…
sarahzara Jul 24, 2026
a5bd1b4
test : add Notebook DB Operations Tests Junit test cases .
sarahzara Jul 24, 2026
ab3d60f
test : add Notebook Operation Tests Junit . #1032
sarahzara Jul 24, 2026
1c5a5f0
test : add Notebook Query Uppercase Tests Junit . #1032
sarahzara Jul 24, 2026
c68a396
test : add Notebook Scripting Tests Junit .
sarahzara Jul 24, 2026
3acf24d
test : add Notebook Transformation Tests Junit
sarahzara Jul 24, 2026
402cc29
fix : update two methods in NotebookPageUtils.java
sarahzara Jul 24, 2026
89c3b98
test: convert AppFilter.feature tests to JUnit
3ashour Jul 27, 2026
f00793a
Merge branch 'feature/convert-DragAndDrop-junit' of https://github.co…
3ashour Jul 27, 2026
3397629
test: convert CreateAppAuthorPermissiontests to JUnit
3ashour Jul 28, 2026
6c39e9a
test : Add and Convert Drag And Drop App Settings Tests to Junit .
sarahzara Jul 28, 2026
4e051be
test: convert CreateAppEditorPermissiontests to JUnit
3ashour Jul 29, 2026
070188d
test: convert CreateAppReadUserPermissiontests to JUnit
3ashour Jul 29, 2026
a34adab
test : add and covert Drag And Drop Commit Tests to Junit .
sarahzara Jul 29, 2026
8430acc
test : add and convert Verify App Filter By Tests to Junit .
sarahzara Jul 29, 2026
259f6b1
test : add and convert Verify Created By Me Filter Tests to Junit .
sarahzara Jul 29, 2026
4cdbf7d
test: Clean BlocksPageContentValidation tests
3ashour Jul 29, 2026
890f6b6
Merge branch 'feature/convert-DragAndDrop-junit' into test-CodeAppFea…
3ashour Jul 29, 2026
524e513
fix : removing unwanted imports from drag and drop packages
sarahzara Jul 29, 2026
740a5bc
fix : update waits in CatlogAccessPageUtility.java .
sarahzara Jul 30, 2026
aacc377
fix : update locator and method of bookmark Section in DragAndDropBlo…
sarahzara Jul 30, 2026
c2170d2
fix : update methods in NotebookPageUtils.java .
sarahzara Jul 30, 2026
0fe604c
fix : remove unwanted import from NotebookTransformationTests.java
sarahzara Jul 30, 2026
d2fdd76
fix : remove unwanted method in VerifyCreatedByMeFilterTests.java
sarahzara Jul 30, 2026
ec2a918
chore : update env.defaults Config .
sarahzara Jul 30, 2026
0642b4a
test: convert AppLandingPage tests to JUnit
3ashour Jul 30, 2026
f638a1d
test : convert and add BlocksTests.java to Junit .
sarahzara Jul 30, 2026
57298ef
test: convert DragAndDropBarChart and DragAndDropDataGrid tests to JUnit
3ashour Jul 31, 2026
ea805ec
Merge branch test-codeAppFeatures into merge_dragndrop_tests #1032
sarahzara Aug 3, 2026
eef126a
test: Update teardown of DragAndDrop tests
3ashour Aug 4, 2026
1f5da32
fix : update NotebookTransformationTests.java .
sarahzara Aug 5, 2026
837b2fe
fix : update NotebookScriptingTests.java
sarahzara Aug 5, 2026
f53d500
fix : update NotebookQueryUppercaseTests.java
sarahzara Aug 5, 2026
445f275
fix : update NotebookOperationTests.java .
sarahzara Aug 5, 2026
808d2dc
fix : update NotebookDBOperationsTests.java .
sarahzara Aug 5, 2026
9965e4c
fix : update NotebookDataFiltersTests.java
sarahzara Aug 5, 2026
df47a1b
fix : update timeout in env.default .
sarahzara Aug 5, 2026
e07abd9
fix : update NotebookDataFiltersTests.java .
sarahzara Aug 5, 2026
dae6782
fix : update CodeAppSettingsTests.java .
sarahzara Aug 5, 2026
0babb63
fix : update CodeAppFilesTests.java .
sarahzara Aug 5, 2026
0a979eb
fix : update BlocksTests.java
sarahzara Aug 5, 2026
ece1a00
fix : update DragAndDropAppSettingsTests.java .
sarahzara Aug 5, 2026
377a388
fix : update DragAndDropCommitTests.java.
sarahzara Aug 5, 2026
c5ae2e0
fix : update VerifyAppFilterByTests.java .
sarahzara Aug 5, 2026
34ed65b
fix : update VerifyCreatedByMeFilterTestsjava
sarahzara Aug 5, 2026
bd1891c
test : implement createcodeapp method in templatecreationutil .
sarahzara Aug 5, 2026
b700cf7
fix : implement new steps in search app method .
sarahzara Aug 5, 2026
33b64e7
test: Revert unintended changes
3ashour Aug 6, 2026
f0ba00e
fix : update seacrhapp method in AppPageUtils.java
sarahzara Aug 6, 2026
cdec25b
fix : add createcode method in TemplateCreationUtils.java
sarahzara Aug 6, 2026
5553624
test : update test cases of code app and drag and drop .
sarahzara Aug 6, 2026
fe50b42
chore: Delete DataBaseCreationUtils.java
3ashour Aug 7, 2026
58dc7f8
refactor: PR fixes
3ashour Aug 7, 2026
dfd5e43
test : add deleteCatalogIfExists method to AddFunctionPageUtils.java
sarahzara Aug 8, 2026
5e98714
fix : refactor NotebookDBOperationsTests.java test cases
sarahzara Aug 8, 2026
4acfcb7
fix : refactor NotebookDataFiltersTests.java test cases
sarahzara Aug 8, 2026
d65d634
fix : refactor NotebookDBOperationsTests test cases .
sarahzara Aug 8, 2026
7bf16c5
fix : refactor NotebookQueryUppercaseTests.java test cases
sarahzara Aug 8, 2026
2d9ef22
fix : refactor NotebookTransformationTests.java test cases
sarahzara Aug 8, 2026
9893b3c
fix : update locks in CreateAppUsingDragAndDropCharts.java .
sarahzara Aug 9, 2026
1f06fb9
fix : fix resources in DragAndDropDataGrid.java
sarahzara Aug 10, 2026
aaa4521
fix: Fixing CreateAppReadUserPermission.java
3ashour Aug 11, 2026
e300354
fix: Fix CreateAppReadUserPermission.java tests
3ashour Aug 12, 2026
1c8c612
fix: xpaths fixes
3ashour Aug 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.defaults
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,4 @@ pinecone_host_name=
pinecone_api_key=

## Version tracking
current_version=0.0.1-SNAPSHOT
current_version=0.0.1-SNAPSHOT
15 changes: 10 additions & 5 deletions src/main/java/aicore/pages/model/SettingsModelPageUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ public class SettingsModelPageUtils {
private static final String SELECT_ROLE_XPTAH = "//div[text()='{role}']";
private static final String ADD_BUTTON_XPATH = "//button[contains(text(),'Add')]";
private static final String DELETE_SUCCESS_TOAST_XPATH = "//li[@data-type='success']";
private static final String DELETE_PERMISSION_ERROR_TOAST_XPATH = "//li[@data-type='error']";
private static final String ADDED_MEMBER_DELETE_ICON_XPATH = "//td//*[contains(@class,'lucide-trash')]";
private static final String DELETE_PERMISSION_ERROR_TOAST_XPATH = "//li[@data-type='error']";
private static final String ADDED_MEMBER_DELETE_ICON_XPATH = "//tr[.//*[normalize-space(text())='{role}']]//button[.//*[contains(@class,'lucide-trash')]]";

private static final String CONFIRM_DELETE_BUTTON_XPATH = "//h2[text()='Delete Member']/parent::div//button[text()='Delete']";
private static final String USAGE_TAB_XPATH = "//button[text()='Usage']";
private static final String MODEL_ID_COPY_OPTION = "//button[@aria-label='copy Model ID']";
Expand Down Expand Up @@ -160,7 +161,7 @@ public static void clickOnAddMembersButton(Page page) {
locator.click();
}

public static void addMember(Page page, String role, boolean useDocker) throws InterruptedException {
public static void addMember(Page page, String role, boolean useDocker) {
page.locator(SEARCH_USER_XPATH).click();
String username = ConfigUtils.getValue(role.toUpperCase() + "_USERNAME").split("@")[0];
if (useDocker) {
Expand Down Expand Up @@ -203,8 +204,12 @@ public static boolean isAddMemberButtonVisible(Page page) {
}

public static void deleteAddedMember(Page page, String role) {
Locator deleteIcon = page.locator(ADDED_MEMBER_DELETE_ICON_XPATH);
deleteIcon.scrollIntoViewIfNeeded();

Locator deleteIcon = page.locator(
ADDED_MEMBER_DELETE_ICON_XPATH.replace("{role}", role)
);

deleteIcon.scrollIntoViewIfNeeded();
deleteIcon.hover();
deleteIcon.click();
page.locator(CONFIRM_DELETE_BUTTON_XPATH).click();
Expand Down
1 change: 1 addition & 0 deletions src/main/java/aicore/utils/AddDatabasePageUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ public static void clickOnDatabaseNameInCatalog(Page page, String dbName) {
page.getByText(dbName).click();
}


public static void clickOnMetadataTab(Page page) {
CatalogPageUtils.clickOnMetadataTab(page);
}
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/aicore/utils/AddFunctionPageUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import aicore.pages.base.AbstractBasePage;
import aicore.pages.function.AddFunctionFormUtils;
import aicore.pages.function.FunctionAccessSettingsUtils;
import io.qameta.allure.Step;


public class AddFunctionPageUtils extends AbstractBasePage {
private static final Logger logger = LogManager.getLogger(AddFunctionPageUtils.class);
Expand All @@ -34,6 +36,10 @@ public class AddFunctionPageUtils extends AbstractBasePage {
private static final String DISCOVERABLE_FUNCTIONS_BUTTON_TESTID = "engineIndexPage-Functions-discoverable-switch";
private static final String CHANGE_ACCESS_BUTTON_XPATH = "//span[text()='{ChangeAccessButton}']";

private static final String CATALOG_CARD_XPATH = "//div[@data-testid='engineIndex-card-{catalogName}']";
private static final String CATALOG_DELETE_OPTION = "engineIndex-card-delete-btn";
private static final String CONFIRM_DELETE_BUTTON = "confirm-delete-btn";

public static boolean userCanSeeFunctionsGridOfOptions(Page page) {
Locator locator = page.getByTestId(FUNCTION_OPTIONS_GRID_TEST_ID);
AICorePageUtils.waitFor(locator);
Expand Down Expand Up @@ -148,6 +154,21 @@ public static void deleteCatalog(Page page, String catalog, String catalogName)
FunctionAccessSettingsUtils.clickOnDeleteConfirmationButton(page);
}
}

@Step("Check if '{catalogType}' catalog '{catalogName}' exists and delete it")
public static void deleteCatalogIfExists(Page page, String catalogType, String catalogName) {
logger.info("CHECK IF " + catalogType + " CATALOG '" + catalogName + "' EXISTS");
page.getByTestId(SEARCH_BAR_DATATESTID).fill(catalogName);
Locator catalogCard = page.locator(CATALOG_CARD_XPATH.replace("{catalogName}", catalogName));
if (catalogCard.count() == 0 || !catalogCard.isVisible()) {
logger.info(catalogType + " catalog '" + catalogName + "' does not exist — nothing to delete");
return;
}
logger.info("DELETING " + catalogType + " CATALOG: " + catalogName);
catalogCard.getByTestId(CATALOG_DELETE_OPTION).click();
page.getByTestId(CONFIRM_DELETE_BUTTON).click();
}


public static Locator searchForAndLocateCatalog(Page page, String catalog, String catalogName) {
Locator searchBar = page.getByTestId(SEARCH_BAR_DATATESTID);
Expand Down
11 changes: 6 additions & 5 deletions src/main/java/aicore/utils/CatlogAccessPageUtility.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class CatlogAccessPageUtility {
private static final String EDITOR_SEE_TOASTER_MESSAGE_XPATH = "//li[@data-type='error']";
private static final String CLICK_ON_CANCEL_BUTTON_XPATH = "//button[contains(@data-testid,'confirmCancel-btn')]";
// create app variable declaration
private static final String CLICK_ON_SETTINGS_XPATH = "//button[@data-testid='workspace-Settings-image']/../..";
private static final String CLICK_ON_SETTINGS_XPATH = "//div[@title='Settings' and contains(@class,'flexlayout__border_button')]";
private static final String CLICK_ON_DELETE_BUTTON_XPATH = "//button[text()='Delete']";
private static final String CLICK_ON_MEMBER_XPATH = "//span[contains(@class, 'MuiTypography-root') and contains(text(), 'Member')]";
private static final String CIICK_ON_GENERAL_XPATH = "//span[contains(@class, 'MuiTypography-root') and contains(text(), 'General')]";
Expand Down Expand Up @@ -85,7 +85,7 @@ public static void searchUserBasedOnRole(Page page, String role) {
if (searchIcon.isVisible()) {
searchIcon.click();
}
page.getByPlaceholder(SEARCH_MEMBER_PLACEHOLDER_TEXT).fill(role);
page.getByPlaceholder(SEARCH_MEMBER_PLACEHOLDER_TEXT).nth(1).fill(role);
page.waitForTimeout(1000);
}

Expand Down Expand Up @@ -151,7 +151,7 @@ public static void setToggleStateForNonDiscovrable(Page page) {

public static boolean canSeeEditOption(Page page, String action) {
Locator editButton = page.locator(SEE_EDIT_OPTION_XPATH);
AICorePageUtils.waitFor(editButton);
AICorePageUtils.waitFor(editButton);
switch (action) {
case "Enable":
return editButton.isEnabled();
Expand Down Expand Up @@ -266,11 +266,11 @@ public static boolean isPortalToggleInExpectedState(Page page, String action) {
Locator enableToggle = page.locator(PUBLISH_ENABLE_TOGGLE_XPATH);
AICorePageUtils.waitFor(enableToggle);
boolean shouldEnable = action.equalsIgnoreCase("enable");
boolean isCurrentlyEnabled = enableToggle.isVisible();
boolean isCurrentlyEnabled = enableToggle.isChecked();
if (isCurrentlyEnabled != shouldEnable) {
enableToggle.click();
}
return enableToggle.isVisible() == shouldEnable;
return enableToggle.isChecked() == shouldEnable;
}

public static boolean clickOnPublishPortalButton(Page page) {
Expand Down Expand Up @@ -302,6 +302,7 @@ public static void changeBrowserWindowSize(Page page, int width, int height) {

public static String getToastMessage(Page page, String toastMessage) {
Locator toast = page.locator(TOASTER_MESSAGE_XPATH).first();
AICorePageUtils.waitFor(toast);
String actualToastMessage = toast.innerText().trim();
return actualToastMessage;
}
Expand Down
78 changes: 67 additions & 11 deletions src/main/java/aicore/utils/page/app/AppPageUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.PlaywrightException;
import com.microsoft.playwright.options.LoadState;
import com.microsoft.playwright.options.WaitForSelectorState;

import aicore.utils.AICorePageUtils;
Expand Down Expand Up @@ -53,16 +55,23 @@ public static void clickOnCreateNewAppButton(Page page) {
locator.click();
}


@Step("Search app: {appName}")
public static void searchApp(Page page, String appName, String timestamp) {
page.getByLabel("Search apps").click();
Locator searchBox = page.getByLabel("Search apps");
searchBox.click();
searchBox.clear();
if (timestamp != null && !timestamp.isEmpty()) {
page.getByLabel("Search apps").fill(appName + " " + timestamp);
searchBox.fill(appName + " " + timestamp);
} else {
page.getByLabel("Search apps").fill(appName);
searchBox.fill(appName);
}
searchBox.press("Enter");
page.waitForTimeout(500);
}




public static void selectAppCardsView(Page page, String view) {
page.locator(CARDS_VIEW_OPTIONS_XPATH.replace("{view}", view)).click();
Expand All @@ -87,16 +96,56 @@ public static void enterDomainNameinAppSettings(Page page, String domainName) {
enterDomain.press("Enter");
}

private static final String[] DATA_CLASSIFICATION_ALL_OPTIONS = { "IP", "PHI", "PII", "Public" };
private static final String[] DATA_RESTRICTIONS_ALL_OPTIONS = { "IP Allowed", "PHI Allowed", "FOUO Allowed" };

/**
* The Data Classification / Data Restrictions checkbox labels are rendered
* fully UPPERCASE in the DOM (e.g. "PUBLIC", "IP ALLOWED"), regardless of the
* case used in test data/feature files (e.g. "Public", "IP Allowed"). XPath
* text() comparisons are case-sensitive, so the option text must be
* normalized to uppercase before being used in a locator.
*/
private static String normalizeOptionText(String option) {
return option == null ? null : option.toUpperCase();
}

public static void selectDataClassificationOptioninAppSettings(Page page, String option) {
Locator selectCheckbox = page.locator(DATA_CLASSIFICATION_CHECKBOX_XPATH.replace("{option}", option));
selectCheckbox.scrollIntoViewIfNeeded();
selectCheckbox.click();
Locator selectCheckbox = page
.locator(DATA_CLASSIFICATION_CHECKBOX_XPATH.replace("{option}", normalizeOptionText(option)));
try {
selectCheckbox.scrollIntoViewIfNeeded();
selectCheckbox.click();
} catch (PlaywrightException e) {
logVisibleOptions(page, "Data Classification", DATA_CLASSIFICATION_ALL_OPTIONS);
throw new RuntimeException("Could not select Data Classification option '" + option
+ "' - see the logged 'currently visible options' above.", e);
}
}

public static void selectDataRestrictionsOptioninAppSettings(Page page, String option) {
Locator selectCheckbox = page.locator(DATA_CLASSIFICATION_CHECKBOX_XPATH.replace("{option}", option));
selectCheckbox.scrollIntoViewIfNeeded();
selectCheckbox.click();
Locator selectCheckbox = page
.locator(DATA_CLASSIFICATION_CHECKBOX_XPATH.replace("{option}", normalizeOptionText(option)));
try {
selectCheckbox.scrollIntoViewIfNeeded();
selectCheckbox.click();
} catch (PlaywrightException e) {
logVisibleOptions(page, "Data Restrictions", DATA_RESTRICTIONS_ALL_OPTIONS);
throw new RuntimeException("Could not select Data Restrictions option '" + option
+ "' - see the logged 'currently visible options' above.", e);
}
}

private static void logVisibleOptions(Page page, String groupName, String[] allOptions) {
StringBuilder visible = new StringBuilder();
StringBuilder missing = new StringBuilder();
for (String opt : allOptions) {
long count = page.locator(DATA_CLASSIFICATION_CHECKBOX_XPATH.replace("{option}", normalizeOptionText(opt)))
.count();
(count > 0 ? visible : missing).append(opt).append(", ");
}
logger.warn("{} - options currently visible in DOM: [{}] | options missing/not-rendered: [{}]", groupName,
visible, missing);
}

public static void clickOnSubmitButtoninAppSettings(Page page) {
Expand Down Expand Up @@ -162,7 +211,7 @@ public static void clickOnButton(Page page, String buttonName) {
}

public static boolean isAppDisplayedOnPage(Page page, String appName, String timestamp) {
String expectedAppName = appName + " " + timestamp;
String expectedAppName = appName + "" + timestamp;
Locator appCard = page.locator((APP_CARD_XPATH.replace("{appName}", expectedAppName)));
AICorePageUtils.waitFor(appCard);
return appCard.isVisible();
Expand Down Expand Up @@ -235,7 +284,14 @@ public static void clickOnInfoButton(Page page, String buttonName) {
}

public static void clickOnDiscoverableAppsButton(Page page) {
page.getByTestId("appCatalogPage-discoverable-btn").click();
// The App Library tabs (My Apps/Discoverable/Bookmarked) are only rendered
// once the initial app list/permissions calls complete, which can lag right
// after switching users. Wait for the page to settle before clicking to
// avoid a flaky 30s timeout on this locator.
page.waitForLoadState(LoadState.NETWORKIDLE);
Locator discoverableButton = page.getByTestId("appCatalogPage-discoverable-btn");
AICorePageUtils.waitFor(discoverableButton);
discoverableButton.click();
}

public static void clickOnFilterButton(Page page, String filterName) {
Expand Down
45 changes: 28 additions & 17 deletions src/main/java/aicore/utils/page/app/BlockSettingsUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,14 @@ public class BlockSettingsUtils {

// Block settings for charts
private static final String DATA_TAB_XPATH = "//button[normalize-space()='Data']";
private static final String DRAG_COLUMN_NAME_XPATH = "//div[@data-rbd-draggable-id='{columnName}']";
private static final String DRAG_COLUMN_NAME_XPATH = "//span[@title='{columnName}']";


private static final String DROP_FIELD_XPATH = "//span[normalize-space()= '{fieldName}']/parent::div/following-sibling::div";
private static final String SEARCH_FRAME_PLACEHOLDER = "Select frame";
private static final String SELECT_FRAME_IN_NOTEBOOK_XPATH = "//button[contains(@class,'items-center')]//span[text()='Select Frame']";

private static final String SELECT_FRAME_IN_NOTEBOOK_XPATH = "//select[option[@value='Select frame'] or option[normalize-space()='Select frame']]";

private static final String DROPPED_COLUMN_IN_FIELD_XPATH = "//span[contains(normalize-space(), '{fieldName}')]/parent::div/following-sibling::div[contains(@id,'{columnName}')]";
private static final String OPTION_XPATH = "//p[text()='{optionName}']/../following-sibling::div//button";

Expand Down Expand Up @@ -113,24 +117,31 @@ public static void clickOnDataTab(Page page) {
dataTab.click();
}


public static void selectFrame(Page page, String frameId) {
Locator selectFrame = page.getByPlaceholder(SEARCH_FRAME_PLACEHOLDER);
Locator NotebookFrame = page.locator(SELECT_FRAME_IN_NOTEBOOK_XPATH);
if (selectFrame.isVisible()) {
selectFrame.scrollIntoViewIfNeeded();
selectFrame.click();
selectFrame.fill(frameId);
selectFrame.press("ArrowDown");
selectFrame.press("Enter");
} else {
NotebookFrame.scrollIntoViewIfNeeded();
NotebookFrame.click();
Locator frameOption = page.getByRole(AriaRole.OPTION, new Page.GetByRoleOptions().setName(frameId));
frameOption.click();
}
page.waitForTimeout(1000);
Locator selectFrame = page.locator("select").filter(
new Locator.FilterOptions().setHasText("Select frame")
);
Locator NotebookFrame = page.locator(SELECT_FRAME_IN_NOTEBOOK_XPATH);

if (selectFrame.isVisible()) {
selectFrame.scrollIntoViewIfNeeded();
selectFrame.selectOption(frameId);
} else {
NotebookFrame.scrollIntoViewIfNeeded();
NotebookFrame.click();
Locator frameOption = page.getByRole(
AriaRole.OPTION,
new Page.GetByRoleOptions().setName(frameId)
);
frameOption.click();
}

page.waitForTimeout(1000);
}



public static void dragColumnToTargetField(Page page, String columnName, String targetField) {
// scroll to column
Locator sourceLocator = page.locator(DRAG_COLUMN_NAME_XPATH.replace("{columnName}", columnName));
Expand Down
Loading