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

为什么我必须使用watir webdriver和firefox睡觉或等待?,firefox,watir,webdriver,watir-webdriver,Firefox,Watir,Webdriver,Watir Webdriver,我想对watir webdriver wait for page load>这个主题发表评论,但是因为我有一个代表,所以我不能 我正在将我的watir脚本升级到watir webdriver,我在Firefox上运行的第一个测试产生了: Selenium::WebDriver::Error::NoSuchElementError: Unable to locate element: {"method":"tag name","selector":"body"} 当我所做的只是登录到我的应用程序

我想对watir webdriver wait for page load>这个主题发表评论,但是因为我有一个代表,所以我不能

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

Selenium::WebDriver::Error::NoSuchElementError: Unable to locate element: {"method":"tag name","selector":"body"}
当我所做的只是登录到我的应用程序(运行良好)时,单击构建信息链接,然后执行以下操作:

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

-> POST session/8607aaa2-d72d-448a-85e1-3f96a1766da1/element
{"value":"body","using":"tag name"}

所以我的问题是这是一个孤立的事件(调用@browser.body,这不是一个完全典型的调用)还是我将不得不使用等待?如果我不能期望驱动程序等待浏览器处于就绪状态,那么watir的全部魅力似乎就消失了。另外,是否有一个开发谷歌组或类似的瓦蒂尔webdriver的东西?我有一种感觉,我将看到越来越多的问题(IE9有几个问题)。我可能还会在Alister的博客(顺便说一句)上询问。

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

这就是等待助手方法的亮点:

找到一个您知道您期望的元素,并使用以下方法:

require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
b.select_list(:id => 'entry_1').wait_until_present
更新:

我认为你的问题与本地事件有关。尝试禁用本机事件

profile = Selenium::WebDriver::Firefox::Profile.new
profile.native_events = false
b = Watir::Browser.new WEB_DRIVER, :profile => profile

您使用的是什么版本的watir webdriver和selenium webdriver gems?我会尝试安装selenium webdriver 2.4.0,看看您是否有相同的问题,应该包括以下信息:ruby 1.8.7 p352、selenium webdriver(2.5.0)watir(2.0.1)watir webdriver(0.3.3)我们的应用程序使用大量ajax,而且经常(令人痛苦地)使用ajax清除某些内容正在异步到达客户端。自从使用watir 1.6.2以来,我就考虑到了这一点,但在本例中,我95%确定内容是静态的。我不想在任何地方都添加等待(这是我多年前选择watir而不是sel的原因),但为了避免这种情况,我必须在我的“watir包装器”层添加等待,而且如果这是合适的策略,那么selenium开发人员将为曾经访问过的每个对象内置等待,直到出现为止……尝试禁用本机事件。它为我解决了问题幸运的是,我已经有了一个WatirUtil层来包装我所有的watir调用,所以我基本上只是对它进行了修改,现在将所有东西包装在一个救援块中,尝试N秒点击、设置、清除等等。我真的很讨厌这个。如果我还没有实现这一层,我将无法使用WW,必须回到watir,它在99.9%的时间里工作得非常好。我很欣赏native events的评论,但根据您的博客,我已经设置了…我刚刚发现使用selenium::webdriver可以创建/增加隐式等待。这对于watir webdriver来说是件好事:driver.manage.timeouts.implicitlyWait(90);您可以在watir webdriver中使用与我们所说的相同的方法:browser.driver.manage.timeouts.implicit_wait=20