在体验Selenium驱动程序后,我强烈感觉到这是 越野车 ,而且确实很难控制。我不确定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
的{{1}}实例上做很多事情(我还没有尝试过,但看起来像所有东西),实际上我想要的只是关机/关闭/处置驱动程序,而不会像这样被阻塞:
ChromeDriver
但是,它将永远(也无法)完成,只是永远被阻止。如果在UI线程上,则UI将被冻结;如果在专用线程上,则什么都不会发生(但调试显示该调用始终被阻止,从而使该线程永不退出)。因此,在这种情况下,我 不能 销毁_driver.Quit();
实例。
在我使用的任何标准/原始开发的.NET库中,它是如此荒谬并且很少(如果不是要表示 从不 )。我知道这个.NET版本的Selenium只是从Java版本移植而来的,所以看起来这是某种Java代码质量吗? (在使用_driver
(另一个从Java到.NET的移植库,但用于Excel处理,它的设计是如此糟糕的时候,我确实经历了类似的感觉)。