问题描述
所以我正在从 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 的东西才能获取当前浏览器并在一次调用中找到所有页面并能够在选项卡之间切换
有什么想法吗?
解决方法
您在《剧作家》中对此的处理方式略有不同。
您创建一个新的上下文:
context = await browser.newContext();
以及该上下文中的一个或多个页面:
let pages = [];
pages.push(await context.newPage());
pages.push(await context.newPage());
如果您不想共享 cookie、缓存,您可以创建多个上下文。上下文不共享 cookie,彼此之间缓存,它们是浏览器实例中的隐身会话。
阅读:
- https://playwright.dev/docs/core-concepts#browser-contexts
- https://playwright.dev/docs/api/class-browser?_highlight=newc#browsernewcontextoptions
- https://playwright.dev/docs/api/class-browser?_highlight=newc#browsernewpageoptions
是的,我至少找到了一种在同一上下文中找到另一个选项卡的方法
var popTask = await browserContext.WaitForEventAsync(ContextEvent.Page);