4

playwright テストを使用してタブを切り替えようとしていますが、windows 要素を制御していません。playwright の selenium driver.switchto().window() に似たメソッドはありますか?

const { chromium } = require('playwright');
(async () => {
    const browser = await chromium.launch({ headless: false, args: ['--start-maximized'] });
    const context = await browser.newContext({ viewport: null });
    context.on("page", async newPage => {
        console.log("***newPage***", await newPage.title())
    })
    const page = await context.newPage()
    const navigationPromise = page.waitForNavigation()

    // dummy url
    await page.goto('https://www.myapp.com/')
    await navigationPromise

    // User login
    await page.waitForSelector('#username-in')
    await page.fill('#username-in', 'username')
    await page.fill('#password-in', 'password')
    await page.click('//button[contains(text(),"Sign In")]')
    await navigationPromise

    // User lands in application home page and clicks on link in dashboard 
    // link will open another application in new tab 
    await page.click('(//span[text()="launch-app-from-dashboard"])[2]')

    await navigationPromise
    await page.context()
    // Waiting for element to appear in new tab and click on ok button
    await page.waitForTimeout(6000)
    await page.waitForSelector('//bdi[text()="OK"]')
    await page.click('//bdi[text()="OK"]')

})()
4

3 に答える 3

2

新しいページ タグを作成すると仮定すると"launch-app-from-dashboard"、次のパターンを使用して、新しいページで後続のコード行を実行できます。その他の例については、複数ページのシナリオ ドキュメントを参照してください。

// Get page after a specific action (e.g. clicking a link)
const [newPage] = await Promise.all([
  context.waitForEvent('page'),
  page.click('a[target="_blank"]') // Opens a new tab
])
await newPage.waitForLoadState();
console.log(await newPage.title());

page.bringToFrontヘッドレスで実行するので、ブラウザの表示タブを( docs )で切り替えると便利かもしれません。

于 2020-10-14T16:08:20.710 に答える