gpt4 book ai didi

selenium - 当浏览器忙于执行一些长时间运行的 JavaScript 时 WebDriver API 阻塞行为

转载 作者:行者123 更新时间:2023-12-04 18:47:55 29 4
gpt4 key购买 nike

我在文档中的某处读到 WebDriver API 是非阻塞的(除了一些像 driver.get)。因此,执行 WebElement click() 或 isDisplayed() 通常应该是异步的(当然,假设启用了 native 事件)。

我有一个简单的 HTML 页面,它执行一个长操作(基本上是一个长循环)。当 JS 执行时,浏览器没有响应,这是预期的。但我也注意到,只要浏览器忙于执行脚本,WebDriver API 就像 click()/isDisplayed()/executeScript() 块。

由于 WebDriver 为单击发出 native 事件而不是合成的 JS 事件,因此我对 API 阻塞的原因感到困惑。虽然目前这种行为并没有困扰我,但我想知道在对无响应的页面运行测试时是否可以依赖这种阻塞性质?我确实在我的测试中使用了条件等待,但想了解幕后发生了什么,以及这是否特定于浏览器/操作系统?

我在 Windows 7 上使用 InternetExplorerDriver (IE9) 和 ChromeDriver (Chrome 19) 的 Selenium 2.20.0 中看到了这种行为。

最佳答案

实际上,使用阻塞与非阻塞 API 是 Selenium 库的许多用户争论的焦点。图书馆在很多地方都会对阻塞进行“最佳猜测”尝试,即使是在元素点击时,但不能保证。阻塞和非阻塞之间的这种张力是 discussed at length在开发者社区中,体现在 one of the FAQs在项目维基。在 IE 的情况下,驱动程序确实尝试阻止元素点击,无论是否成功阻止都是竞争条件。在您的特定页面的情况下,IE 驱动程序(显然是 Chrome)正在“赢得”比赛,直到操作完成为止。但是,驱动程序在其他情况下也很容易输掉比赛,因此最好在继续执行代码的下一步之前使用显式等待其他页面更改。

如果将来出现问题,您可以通过设置 page load timeout 来缓解这种情况。进入下一个更早的陈述。这种方法的一个小挑战是目前并非所有浏览器都可以实现超时(IE 可以,我不了解 Chrome)。

关于selenium - 当浏览器忙于执行一些长时间运行的 JavaScript 时 WebDriver API 阻塞行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118077/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com