如何在playwright-java中切换到新标签页或窗口?

xzv2uavs  于 2023-06-20  发布在  Java
关注(0)|答案(5)|浏览(1056)

我们如何切换到一个在运行test时打开的新窗口,以及如何在playwright-java中返回到父窗口?

sf6xfgos

sf6xfgos1#

没有像Selenium这样的Switch操作。您可以使用waitForPagewaitForPopup函数。您只需要知道触发新页面的操作是什么。例如

Page popup = context.waitForPage(() -> page.click("a"));

context类还有一个pages()函数,它返回所有打开的页面。

i5desfxk

i5desfxk2#

它对我来说很好:

String newUrl = page.context().pages().get(index_to_switch).url();
page.navigate(newUrl);

但你也可以这样尝试:

page.context().pages().get(index_to_switch).bringToFront()
93ze6v8z

93ze6v8z3#

扩展@hardkoded的答案,我得到了一个错误,现在使用这个:

context.waitForEvent('page')

到目前为止都符合我的目的

cczfrluj

cczfrluj4#

您要做的是在新页面中继续测试。官方文档:https://playwright.dev/docs/pages#handling-new-pages
下面是一个例子,我们首先在初始的“页面”中工作,然后单击一个按钮后,我们希望在一个新的标签中继续我们的测试,我们定义为“newPage”:

// Here we are working in the initial page
        await page.locator("#locator").type("This happens in the initial page..");

        /*  When "Ok" is clicked the test waits for a new page event and assigns to new page object to a variable called newPage
            After this point we want the test to continue in the new tab,
            so we'll have to use the newly defined newPage variable when working on that tab
        */
        const [newPage] = await Promise.all([
            context.waitForEvent('page'),
            page.locator("span >> text=Ok").click()
            
        ])
        await newPage.waitForLoadState();

        console.log("A new tab opened and the url of the tab is: " + newPage.url());

        // Here we work with the newPage object and we can perform actions like with page
        await newPage.locator("#Description").type("This happens in a new tab!");
ax6ht2ek

ax6ht2ek5#

下面的代码片段在选项卡之间工作。

page.context().pages().stream().filter(x -> x.title().equals("expectedTitle")).findFirst().get().bringToFront();

相关问题