webdriver的API拦截行为时,浏览器正在执行一些长期运行的JavaScript(WebDri

2019-09-18 07:42发布

我在那webdriver的API的文档的阅读的地方是非阻塞(除了少数像driver.get)。 因此,执行WebElement点击()或isDisplayed()一般应异步(假设本机事件是有效的,当然)。

我有一个执行长操作(基本上是一个长环)一个简单的HTML页面。 虽然JS执行,浏览器没有反应,预计。 但是,我也注意到,webdriver的API的像click()/ isDisplayed()/ executeScript()块,只要浏览器正忙于执行脚本。

由于是的webdriver发出的点击,而不是合成的JS事件本地事件,我百思不得其解,为什么API块。 虽然目前这种行为不是困扰着我,我想知道这是否阻塞性质可运行针对反应迟钝的网页测试时不能依赖? 我不使用条件等待在我的测试,但想了解罩下会发生什么,如果这是浏览器/操作系统的具体?

我看到这种行为在硒2.20.0在Windows 7 InternetExplorerDriver(IE9)和ChromeDriver(铬19)。

Answer 1:

实际上,使用阻塞与非阻塞API的是争对硒图书馆的许多用户的一个点。 有很多的,其中库做的是“最佳猜测”企图阻断,甚至在元素点击的地方,但它不能保证。 阻塞和非阻塞之间的这种张力已被详细讨论的显影剂社区中,并反映在常见问题中的一个在项目wiki。 在IE中的情况下,驾驶者试图在元件的点击框,以及它是否在阻断或不成功这是一个争用条件。 在您的特定页面的情况下,IE浏览器的驱动程序(和Chrome显然)是“中奖”那场比赛,阻塞,直到操作完成。 然而,驾驶员可以很容易失去在其他情况下那场比赛,所以最好继续在你的代码的下一步骤之前使用其他页面变化明确的等待。

如果它成为在未来的一个问题,您可能能够通过设置来缓解此页面加载超时就移动到下一个声明更早。 这种方法的一个小的挑战是,并非所有的浏览器可以实现当前的超时(IE浏览器,我不知道关于Chrome)。



文章来源: WebDriver API blocking behavior when browser is busy executing some long running JavaScript