65 lines
2.2 KiB
TypeScript
65 lines
2.2 KiB
TypeScript
import type { Page } from "@playwright/test";
|
|
import { highlightAndExpectVisible } from "@playwright/utils/highlight";
|
|
import { navTest } from "@playwright/components/navTest";
|
|
import { headerTest } from "@/playwright/components/header/headerTest";
|
|
import { footerTest } from "@playwright/components/footerTest";
|
|
|
|
export async function runDigitalOutputsTest(page: Page) {
|
|
await page.goto("/digitalOutputs");
|
|
//----------------------
|
|
await headerTest(page);
|
|
await navTest(page);
|
|
await footerTest(page);
|
|
// Wait a moment for initial redux fetch and render in slower CI environments
|
|
await page.waitForTimeout(400);
|
|
//----------------------
|
|
await highlightAndExpectVisible(page, page.locator("h1"));
|
|
page.locator("h1").click();
|
|
await highlightAndExpectVisible(
|
|
page,
|
|
page.locator("h2").filter({ hasText: "Schaltausgänge" })
|
|
);
|
|
|
|
page
|
|
.locator("h2")
|
|
.filter({ hasText: "Schaltausgänge" })
|
|
.locator("svg")
|
|
.click();
|
|
page.locator("h2").filter({ hasText: "Schaltausgänge" }).click();
|
|
// Wait for the outputs table to render and be visible
|
|
const table = page.locator("table");
|
|
await table.first().waitFor({ state: "visible", timeout: 15000 });
|
|
|
|
// Prefer robust selection: select the row by its first cell text matching the id "2"
|
|
const rowAusgang2 = table
|
|
.getByRole("row")
|
|
.filter({ has: page.getByRole("cell", { name: /^\s*2\s*$/ }) })
|
|
.first();
|
|
await rowAusgang2.waitFor({ state: "visible", timeout: 15000 });
|
|
await rowAusgang2.click();
|
|
await highlightAndExpectVisible(
|
|
page,
|
|
page.getByRole("cell", { name: "Schalter" })
|
|
);
|
|
await highlightAndExpectVisible(
|
|
page,
|
|
page.getByRole("cell", { name: "Schalter" })
|
|
);
|
|
await highlightAndExpectVisible(
|
|
page,
|
|
page.getByRole("cell", { name: "Aktion" })
|
|
);
|
|
// Interact with the switch icon within each row deterministically
|
|
for (const id of [1, 2, 3, 4]) {
|
|
const row = table
|
|
.getByRole("row")
|
|
.filter({
|
|
has: page.getByRole("cell", { name: new RegExp(`^\\s*${id}\\s*$`) }),
|
|
})
|
|
.first();
|
|
await row.waitFor({ state: "visible", timeout: 10000 });
|
|
const switchIcon = row.locator("td >> nth=2").locator("svg");
|
|
await switchIcon.first().click();
|
|
}
|
|
}
|