为什么我必须睡觉或等待使用watir-webdriver和firefox?

jwa*_*lis 4 firefox webdriver watir watir-webdriver

好吧,我想评论watir-webdriver等待页面加载>这个主题,但因为我有1个代表我不能.

我正在将我的watir脚本升级到watir-webdriver,我在Firefox上运行的第一个测试产生了:

Selenium::WebDriver::Error::NoSuchElementError: Unable to locate element: {"method":"tag name","selector":"body"}
Run Code Online (Sandbox Code Playgroud)

当我所做的只是登录我的应用程序(工作正常),单击构建信息链接,并执行以下操作:

@browser.text
Run Code Online (Sandbox Code Playgroud)

这种情况一直发生 在这里阅读之后,我在点击之后和@ browser.text之前进行了一次睡眠并且它有效.我的结论显然是Firefox驱动程序在尝试之前没有等到页面加载

-> POST session/8607aaa2-d72d-448a-85e1-3f96a1766da1/element
{"value":"body","using":"tag name"}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是这是一个孤立的事件(调用@ browser.body,这不是一个完全典型的调用)或者我将不得不使用等待?如果我不能指望驱动程序等到浏览器处于就绪状态,那么看起来整个美丽的watir都会丢失.此外,是否有一个开发谷歌组或类似的东西为watir-webdriver?我觉得我会看到越来越多的问题(IE9的几个问题).我可能也会在Alister的博客上询问(哪个是摇滚,顺便说一句).

Ali*_*ott 6

Watir-WebDriver应该等到页面准备就绪,但问题是动态生成了很多内容,确实没有一个明确的准备就绪.

这是等待助手方法的亮点:http://watirwebdriver.com/waiting/

找到您期望的元素,并使用以下内容:

require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
b.select_list(:id => 'entry_1').wait_until_present
Run Code Online (Sandbox Code Playgroud)

更新:

我认为您的问题与原生事件有关.尝试禁用本机事件

profile = Selenium::WebDriver::Firefox::Profile.new
profile.native_events = false
b = Watir::Browser.new WEB_DRIVER, :profile => profile
Run Code Online (Sandbox Code Playgroud)