diff --git a/test/automation/src/index.ts b/test/automation/src/index.ts index 2e4adf28c49..bc4c8dcb2bd 100644 --- a/test/automation/src/index.ts +++ b/test/automation/src/index.ts @@ -37,7 +37,6 @@ export * from './positron/positronPlots'; export * from './positron/fixtures/positronPythonFixtures'; export * from './positron/fixtures/positronRFixtures'; export * from './positron/fixtures/positronUserSettingsFixtures'; -export * from './positron/positronBaseElement'; export * from './positron/positronNotebooks'; export * from './positron/positronNewProjectWizard'; export * from './positron/positronConnections'; diff --git a/test/automation/src/positron/positronBaseElement.ts b/test/automation/src/positron/positronBaseElement.ts deleted file mode 100644 index 52530372e46..00000000000 --- a/test/automation/src/positron/positronBaseElement.ts +++ /dev/null @@ -1,57 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (C) 2024 Posit Software, PBC. All rights reserved. - * Licensed under the Elastic License 2.0. See LICENSE.txt for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Page } from '@playwright/test'; -import { Code } from '../code'; - -/* - * Base class for Positron elements similar to a PageObject - * This uses the Code class to interact with the UI - */ -export class PositronBaseElement { - myselector: string; - - constructor(myselector: string, protected code: Code = this.code) { - this.myselector = myselector; - } - - async click(): Promise { - await this.code.driver.page.locator(this.myselector).click(); - } - - async isNotVisible(retryCount: number = 200): Promise { - await this.code.waitForElement(this.myselector, (result) => !result, retryCount); - } - - async waitforVisible(): Promise { - await this.code.waitForElement(this.myselector); - } - - async hover(): Promise { - await this.code.driver.getLocator(this.myselector).hover(); - } - - async isDisabled(): Promise { - return await this.code.driver.getLocator(this.myselector).isDisabled(); - } - - async isEnabled(): Promise { - return await this.code.driver.getLocator(this.myselector).isEnabled(); - } - - getPage(): Page { - return this.code.driver.getLocator(this.myselector).page(); - } -} - -export class PositronTextElement extends PositronBaseElement { - constructor(myselector: string, code: Code) { - super(myselector, code); - } - - async waitForText(expectedText: string): Promise { - return await this.code.waitForTextContent(this.myselector, expectedText); - } -} diff --git a/test/automation/src/positron/positronDataExplorer.ts b/test/automation/src/positron/positronDataExplorer.ts index d334263e701..cb34c0926ba 100644 --- a/test/automation/src/positron/positronDataExplorer.ts +++ b/test/automation/src/positron/positronDataExplorer.ts @@ -4,9 +4,8 @@ *--------------------------------------------------------------------------------------------*/ -import { expect } from '@playwright/test'; +import { expect, Locator } from '@playwright/test'; import { Code } from '../code'; -import { PositronBaseElement } from './positronBaseElement'; import { Workbench } from '../workbench'; const COLUMN_HEADERS = '.data-explorer-panel .right-column .data-grid-column-headers'; @@ -48,10 +47,10 @@ export interface ColumnProfile { */ export class PositronDataExplorer { - clearSortingButton: PositronBaseElement; + clearSortingButton: Locator; constructor(private code: Code, private workbench: Workbench) { - this.clearSortingButton = new PositronBaseElement(CLEAR_SORTING_BUTTON, this.code); + this.clearSortingButton = this.code.driver.page.locator(CLEAR_SORTING_BUTTON); } /* diff --git a/test/automation/src/positron/positronExplorer.ts b/test/automation/src/positron/positronExplorer.ts index daf78db16c9..67d033413d8 100644 --- a/test/automation/src/positron/positronExplorer.ts +++ b/test/automation/src/positron/positronExplorer.ts @@ -4,10 +4,8 @@ *--------------------------------------------------------------------------------------------*/ -import { expect } from '@playwright/test'; +import { expect, Locator } from '@playwright/test'; import { Code } from '../code'; -// import { QuickAccess } from '../quickaccess'; -import { PositronTextElement } from './positronBaseElement'; const POSITRON_EXPLORER_PROJECT_TITLE = 'div[id="workbench.view.explorer"] h3.title'; const POSITRON_EXPLORER_PROJECT_FILES = 'div[id="workbench.view.explorer"] span[class="monaco-highlighted-label"]'; @@ -17,12 +15,10 @@ const POSITRON_EXPLORER_PROJECT_FILES = 'div[id="workbench.view.explorer"] span[ * Reuseable Positron explorer functionality for tests to leverage. */ export class PositronExplorer { - explorerProjectTitle: PositronTextElement; + explorerProjectTitle: Locator = this.code.driver.page.locator(POSITRON_EXPLORER_PROJECT_TITLE); explorerProjectTitleLocator = this.code.driver.page.locator(POSITRON_EXPLORER_PROJECT_TITLE); - constructor(protected code: Code) { - this.explorerProjectTitle = new PositronTextElement(POSITRON_EXPLORER_PROJECT_TITLE, this.code); - } + constructor(protected code: Code) { } /** * Constructs a string array of the top-level project files/directories in the explorer. diff --git a/test/automation/src/positron/positronTopActionBar.ts b/test/automation/src/positron/positronTopActionBar.ts index d97117f04cf..1e478deed6b 100644 --- a/test/automation/src/positron/positronTopActionBar.ts +++ b/test/automation/src/positron/positronTopActionBar.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ +import { Locator } from '@playwright/test'; import { Code } from '../code'; -import { PositronBaseElement } from './positronBaseElement'; const POSITRON_TOP_ACTION_BAR = 'div[id="workbench.parts.positron-top-action-bar"]'; const POSITRON_TOP_ACTION_SAVE_BUTTON = 'div[id="workbench.parts.positron-top-action-bar"] .action-bar-region-left .action-bar-button[aria-label="Save"]'; @@ -15,13 +15,13 @@ const POSITRON_TOP_ACTION_SAVE_ALL_BUTTON = 'div[id="workbench.parts.positron-to * Reuseable Positron top action bar functionality for tests to leverage. */ export class PositronTopActionBar { - topActionBar: PositronBaseElement; - saveButton: PositronBaseElement; - saveAllButton: PositronBaseElement; + topActionBar: Locator; + saveButton: Locator; + saveAllButton: Locator; constructor(private code: Code) { - this.topActionBar = new PositronBaseElement(POSITRON_TOP_ACTION_BAR, this.code); - this.saveButton = new PositronBaseElement(POSITRON_TOP_ACTION_SAVE_BUTTON, this.code); - this.saveAllButton = new PositronBaseElement(POSITRON_TOP_ACTION_SAVE_ALL_BUTTON, this.code); + this.topActionBar = this.code.driver.page.locator(POSITRON_TOP_ACTION_BAR); + this.saveButton = this.code.driver.page.locator(POSITRON_TOP_ACTION_SAVE_BUTTON); + this.saveAllButton = this.code.driver.page.locator(POSITRON_TOP_ACTION_SAVE_ALL_BUTTON); } } diff --git a/test/automation/src/positron/positronVariables.ts b/test/automation/src/positron/positronVariables.ts index 66f3452947c..8dce77a2918 100644 --- a/test/automation/src/positron/positronVariables.ts +++ b/test/automation/src/positron/positronVariables.ts @@ -16,7 +16,8 @@ interface FlatVariables { const VARIABLE_ITEMS = '.variable-item'; const VARIABLE_NAMES = 'name-column'; const VARIABLE_DETAILS = 'details-column'; -const VARIABLES_NAME_COLUMN = '.variables-instance[style*="z-index: 1"] .variable-item .name-column'; +const CURRENT_VARIABLES_GROUP = '.variables-instance[style*="z-index: 1"]'; +const VARIABLES_NAME_COLUMN = `${CURRENT_VARIABLES_GROUP} .variable-item .name-column`; const VARIABLES_INTERPRETER = '.positron-variables-container .action-bar-button-text'; const VARIABLE_CHEVRON_ICON = '.gutter .expand-collapse-icon'; const VARIABLE_INDENTED = '.name-column-indenter[style*="margin-left: 40px"]'; @@ -70,7 +71,7 @@ export class PositronVariables { async toggleVariable({ variableName, action }: { variableName: string; action: 'expand' | 'collapse' }) { await this.waitForVariableRow(variableName); - const variable = this.code.driver.page.locator('.name-value', { hasText: variableName }); + const variable = this.code.driver.page.locator(`${CURRENT_VARIABLES_GROUP} .name-value`, { hasText: variableName }); const chevronIcon = variable.locator('..').locator(VARIABLE_CHEVRON_ICON); const isExpanded = await chevronIcon.evaluate((el) => el.classList.contains('codicon-chevron-down')); @@ -107,7 +108,7 @@ export class PositronVariables { */ async getVariableChildren(parentVariable: string, collapseParent = true): Promise<{ [key: string]: { value: string; type: string } }> { await this.expandVariable(parentVariable); - const variable = this.code.driver.page.locator(`.name-value:text-is("${parentVariable}")`); + const variable = this.code.driver.page.locator(`${CURRENT_VARIABLES_GROUP} .name-value:text-is("${parentVariable}")`); // get the children of the parent variable, which are indented const children = await variable.locator('..').locator('..').locator('..').locator('..').locator(VARIABLE_ITEMS) diff --git a/test/e2e/areas/variables/variables-expanded.test.ts b/test/e2e/areas/variables/variables-expanded.test.ts index f860d5e8ada..a5b9548665e 100644 --- a/test/e2e/areas/variables/variables-expanded.test.ts +++ b/test/e2e/areas/variables/variables-expanded.test.ts @@ -13,7 +13,6 @@ test.describe('Variables - Expanded View', { tag: [tags.WEB, tags.VARIABLES] }, test.afterEach(async function ({ app }) { await app.workbench.positronLayouts.enterLayout('stacked'); - await app.workbench.positronConsole.barRestartButton.click(); }); test('Python - should display children values and types when variable is expanded [C1078836]', async function ({ app, python }) {