使用 WaitForURLAsync 单击导航期间 Playwright .NET 中的竞争条件

问题描述 投票:0回答:1

我正在将 Playwright 与 .NET 绑定一起使用

曾经存在一个问题,通过点击进行导航可能会导致竞争条件,即:

await page.ClickAsync(".foo");         // indirectly causes a navigation
await page.WaitForNavigationAsync();   // race condition; times out

这是从 Puppeteer(Playwright 是其分支)继承的问题,建议使用相同的解决方法(即使它应该在 .NET 中工作,但由于 cs-js 互操作,需要此模式):

var task = page.WaitForNavigationAsync(); await page.ClickAsync(".foo"); await task;
从那时起,剧作家引入了

WaitForURLAsync

功能,这应该可以消除这个问题:

await page.ClickAsync(".foo"); await page.WaitForURLAsync();
我认为这对其他人也有效。但我使用的是 .NET 绑定,并且在抓取 SPA 时看到了这个问题;当我使用旧的解决方法时,问题就消失了:

var task = page.WaitForURLAsync(); await page.ClickAsync(".foo"); await task;
我无法发布特定网站的复制品,因为它是机密的。但我想知道这个新的 .NET 方法的实现是否与 Node 版本具有相同的行为?有其他人遇到过这个问题吗?你采取了什么补救措施?

c# playwright race-condition playwright-dotnet
1个回答
0
投票
您可以按照以下方式等待事件,如此处所述,这会有所帮助

var waitForRequestTask = page.WaitForRequestAsync("**/*logo*.png"); await page.ClickAsync(".foo"); var request = await waitForRequestTask;

或者可以使用expect,然后它会等待它然后再前进

Expect(Page.locator("Element on target page")).ToBeVisibleAsync()

© www.soinside.com 2019 - 2024. All rights reserved.