为了账号安全,请及时绑定邮箱和手机立即绑定

在剧作家测试中切换标签

在剧作家测试中切换标签

倚天杖 2023-05-11 14:15:27
我正在尝试使用 playwright 测试在选项卡之间切换,但它没有控制 windows 元素。剧作家里面有没有类似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 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

假设"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 )切换浏览器中的可见选项卡也可能很有用。



查看完整回答
反对 回复 2023-05-11
?
达令说

TA贡献1821条经验 获得超6个赞

假设您只创建了一个页面(通过浏览器上下文),但由于某种原因,打开了新页面/选项卡。您可以通过 : 获得所有页面的列表context.pages,现在该列表的每个元素代表一个<class 'playwright.async_api._generated.Page'>对象。所以,现在您可以将每个页面分配给任何变量并访问它。(例如。page2 = context.pages[1]



查看完整回答
反对 回复 2023-05-11
?
冉冉说

TA贡献1877条经验 获得超1个赞

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


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');


查看完整回答
反对 回复 2023-05-11
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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

})


查看完整回答
反对 回复 2023-05-11
  • 4 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信