Sha*_*ama 5 selenium automation webdriver browser-automation selenium-webdriver
我在文档中的某处读到WebDriver API是非阻塞的(除了一些像driver.get之外).因此,执行WebElement click()或isDisplayed()通常应该是异步的(假设当然启用了本机事件).
我有一个简单的HTML页面执行长操作(基本上是一个长循环).当JS执行时,浏览器没有响应,这是预期的.但我也注意到,只要浏览器忙于执行脚本,WebDriver API就像click()/ isDisplayed()/ executeScript()一样.
由于WebDriver为点击而不是合成的JS事件发布本机事件,我很困惑为什么API阻止.虽然目前这种行为并没有困扰我,但我想知道在针对无响应的页面运行测试时是否可以依赖这种阻塞性质?我在测试中使用有条件的等待,但是想了解底层发生了什么,以及这是否特定于浏览器/操作系统?
我在Selenium 2.20.0中看到了这种行为,在Windows 7上安装了InternetExplorerDriver(IE9)和ChromeDriver(Chrome 19).
实际上,使用阻塞与非阻塞API是Selenium库的许多用户争论的焦点.在很多地方,图书馆会进行"最佳猜测"尝试阻止,即使是元素点击,但它无法保证.阻塞和非阻塞之间的这种紧张关系已在开发人员社区中进行了详细讨论,并反映在项目维基中的一个常见问题解答中.在IE的情况下,驱动程序确实试图阻止元素点击,并且它是否成功阻止是竞争条件.对于您的特定页面,IE驱动程序(显然是Chrome)正在"赢得"该竞赛,直到操作完成后才会阻止.但是,在其他情况下,驱动程序可能很容易丢失该竞争,因此在继续执行代码中的下一步之前,最好使用显式等待其他页面更改.
如果它在将来成为问题,您可以通过设置页面加载超时来缓解此问题,以便继续前面的下一个语句.这种方法的一个小挑战是,并非所有浏览器都可以实现当前的超时(IE确实如此,我不知道Chrome).
| 归档时间: |
|
| 查看次数: |
4420 次 |
| 最近记录: |