.net - 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 处理时,我经历过某种类似的感觉,它的设计实在太糟糕了)。
解决方案
推荐阅读
- java - Java OffsetDateTime 返回错误的偏移量
- jquery - jQueryUI AutoComplete 搜索标签字符串长度
- reactjs - 当它在另一个组件React的区域中时如何检测拖动的组件?
- c++ - 尝试重载 << 运算符时出错
- node.js - 如何使用 socket.io 连接多个应用程序
- spring-boot - Spring security OAuth2 资源服务器 JWT 授权错误
- flutter - 防止嵌套滚动视图中的视差滚动 Flutter
- visual-studio-code - 命令“重新加载 Vibrancy”导致错误(运行贡献的命令:“extension.updateVibrancy”失败。)
- javascript - 在任何桌面上滑动的全屏 HTML 页面
- reactjs - 从 Flask 到 React.js 的回调函数