0

所以我正在从 Selenium .net 转移到 PlayWrightSharp 的过程中,我所做的是获取当前句柄并能够在选项卡之间切换......我无法在 playwrightsharp 中找到一个明确的方法来做到这一点。

示例:硒

        public IWebDriver ReturnlastKnownPageSession(IWebDriver _driver)
        {
            return _driver.SwitchTo().Window(_driver.WindowHandles.Last());
        }

PlayWriteSharp:

        [PlaywrightTest("browsercontext-basic.spec.ts", "should return all of the pages")]
        [Fact(Timeout = TestConstants.DefaultTestTimeout)]
        public async Task ShouldReturnAllOfThePages()
        {
            await using var context = await Browser.NewContextAsync();
            var page = await context.NewPageAsync();
            var second = await context.NewPageAsync();

            Assert.Equal(2, context.Pages.Length);
            Assert.Contains(page, context.Pages);
            Assert.Contains(second, context.Pages);
        }

必须有类似于 selenium 的东西才能获取当前浏览器并在一次调用中找到所有页面并能够在选项卡之间切换

有什么想法吗?

4

3 回答 3

0

您可以使用@pavelsaman 编写的内容,而不是仅使用列表的数组,然后您可以执行以下操作:

var pages = new List<IPage>();
pages.Add(await context.newPage())

pages[index] 会给你正常的页面。

于 2021-12-10T17:47:24.910 回答
0

是的,我至少找到了一种在同一上下文中找到另一个选项卡的方法

var popTask = await browserContext.WaitForEventAsync(ContextEvent.Page);

于 2021-02-18T20:45:23.033 回答
0

您在剧作家中对此有所不同。

您创建一个新的上下文:

context = await browser.newContext();

以及该上下文中的一个或多个页面:

let pages = [];
pages.push(await context.newPage());
pages.push(await context.newPage());

如果您不想共享 cookie、缓存,则创建多个上下文。上下文不共享 cookie,彼此之间缓存,它们是浏览器实例中的隐身会话。

读数:

于 2021-02-18T16:47:36.837 回答