首页 > 解决方案 > Selenium ChromeDriver 的方法在使用 ExecuteAsyncScript 后被阻塞(等待来自 JS 的结果)?

问题描述

体验了 Selenium 驱动,我有一种强烈的感觉,那就是这太 bug 了,真的很难控制。我不太确定 Java 版本是否也是这种情况,但这里我说的是 .NET 版本(使用 nuget: 安装Selenium.WebDriver)。

我在模仿这个案例ExecuteAsyncScript会在从 javascript 返回一些结果之前阻塞一段时间。然而,它的调用被放在另一个线程上,该线程将当前 UI 线程从阻塞中释放出来,如下所示:

//this helps mimic the blocking situation better
_driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromDays(1);
Task.Run(() => {
                _driver.ExecuteAsyncScript("");
               });

_driver之后我不能在实例(of )上做很多事情(我没有尝试过所有的东西,但看起来像所有东西)ChromeDriver,我真正想要的只是关闭/关闭/处置驱动程序而不会像这样被阻止:

_driver.Quit(); 

但是,它永远不会(也不能)完成,呼叫只是永远被阻止。如果它在 UI 线程上,则 UI 将被冻结,如果它在专用线程上,则不会发生任何事情(但调试显示调用始终被阻止,使线程永远不会退出)。所以我不能在这种情况下销毁_driver实例。

在我使用过的任何标准/最初开发的 .NET 库中都很少遇到(如果不是说从不) ,这太荒谬了。我知道这个 .NET 版本的 Selenium 只是从 Java 版本移植过来的,所以看起来这是某种 Java 代码质量?NPOI(在使用另一个 Java 到 .NET 的移植库但用于 Excel 处理时,我经历过某种类似的感觉,它的设计实在太糟糕了)。

标签: .netseleniumselenium-webdriverselenium-chromedriver

解决方案


推荐阅读