首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在playwright测试中切换选项卡

在playwright测试中切换选项卡
EN

Stack Overflow用户
提问于 2020-10-14 15:24:22
回答 3查看 3.8K关注 0票数 3

我正在尝试使用playwright测试在选项卡之间切换,但它不能控制窗口元素。我们在playwright中有没有类似selenium driver.switchto().window()的方法?

代码语言:javascript
复制
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"]')

})()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-15 00:08:21

假设"launch-app-from-dashboard"正在创建一个新页面标记,您可以使用以下模式在新页面上运行后续代码行。有关更多示例,请参阅multi-page scenarios doc

代码语言:javascript
复制
// 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());

由于您运行的是headless,因此使用page.bringToFront (docs)切换浏览器中的可见选项卡可能也很有用。

票数 1
EN

Stack Overflow用户

发布于 2020-10-16 20:12:53

代码语言:javascript
复制
`it('Open a new tab and check the title', async function () {
    await page.click(button, { button: "middle" }); //to open an another tab
    await page.waitForTimeout(); // wait for page loading 
    let pages = await context.pages();
    expect(await pages[1].title()).equal('Title'); /to compare the title of the second page`
票数 0
EN

Stack Overflow用户

发布于 2021-08-18 02:09:52

browserContext?.pages()是一个包含应用程序打开的选项卡的数组,您可以从那里使用一个临时页面进行切换,一旦完成验证,您就可以切换回来。

代码语言:javascript
复制
playwright.pageMain: Page = await playwright.Context.newPage();
playwright.pageTemp: Page; 

// Save your current page to Temp 
playwright.pageTemp = playwright.pageMain;

// Make the new tab launched your main page
playwright.pageMain = playwright.browserContext?.pages()[1];
expect(await playwright.pageMain.title()).toBe('Tab Title');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64348468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档