typescript - Πώς να γράψετε τη μέθοδο waitForElementText στο Playwright


Θα ήθελα να έχω τη waitForElementText() στο playwright.

Π.χ. Έχω επικεφαλίδες σε κάθε σελίδα cssSelector='.header-name'.

και πλοηγούμαι από την Αρχική σελίδα στους Χρήστες

Δίνω δύο επιχειρήματα στη μέθοδο: waitForElementText( locator: string, expectedText: string)

και θέλω να περιμένω να αλλάξει το όνομα της κεφαλίδας από Αρχική → Χρήστες

Προσπάθησα να χρησιμοποιήσω τη μέθοδο page.waitForFunction() αλλά λαμβάνω σφάλμα:

page.waitForFunction: TypeError: Cannot read properties of undefined (reading 'locator')

Απάντηση #1

Εφόσον το API του locator του Playwright περιμένει αυτόματα τα στοιχεία και διαθέτει ένα selector βασισμένο σε κείμενο, το waitForText υπάρχει ήδη στο API ως getByText:

await page.getByText("Users"); // for a substring match

// or an "exact" match (after whitespace normalization):
await page.getByText("Users", {exact: true});

// or as an assertion:
await expect(page.getByText("Users", {exact: true})).toBeVisible();

Μπορείτε να αλυσιδώσετε τους εντοπιστές αν αυτό δεν είναι αρκετό για να εξακριβώσετε το στοιχείο:

const playwright = require("playwright"); // ^1.39.0

const html = `<!DOCTYPE html><html><body>
<h1 class="header-name">  Users  </h1></body></html>`;

let browser;
(async () => {
  browser = await playwright.firefox.launch();
  const page = await browser.newPage();
  await page.setContent(html);
  await page
   .locator(".header-name")
   .getByText("Users", {exact: true})
   .waitFor();
})()
  .catch(err => console.error(err))
  .finally(() => browser?.close());

Απάντηση #2

Χρησιμοποιήστε τον αυτόματο επαναλαμβανόμενο έλεγχο toHaveText

Αυτό περιμένει έως ότου ο Εντοπιστής δείξει σε ένα στοιχείο με το δοθέν κείμενο. Μπορείτε επίσης να χρησιμοποιήσετε κανονικές εκφράσεις για την τιμή.

const locator = page.locator('.title');
await expect(locator).toHaveText(/Welcome, Test User/);
await expect(locator).toHaveText(/Welcome, .*/);