如何使用Watir :: Waiter :: wait_until强制Chrome等待?

我试图告诉我的watir脚本等待ajax注入的登录框打开。 我正在使用watir-webdriver,并在Chrome中进行测试。 我无法让wait_until工作,如下面(简化)脚本中所评论的那样。

 require "rubygems" require "watir-webdriver" b = Watir::Browser.new(:chrome) site = "www.example.com" b.goto site puts "Click on Sign In button" b.link(:id, 'btnLogin').click puts "Waiting for the username/password dialog to show up" # Below line does *not* work # Throws this error: "uninitialized constant Watir::Waiter (NameError)" Watir::Waiter::wait_until { b.text_field(:id, 'username').exists? } # Below line does *not* work # Throws this error: "undefined method `wait_until' for main:Object (NoMethodError)" wait_until { b.text_field(:id, 'username').exists? } # Below line *does* work, but I don't want to use it. sleep 1 until b.text_field(:id, 'username').exists? 

Watir::Waiter是IE专用课吗? 或者我做错了什么, sleep 1等待方法工作得很好。 我是Ruby和watir的新手,我昨天刚刚接受了这个,所以我有一半期待这是我不忠的结果。

如果它是相关的,我正在使用mac(OSX v.10.6.5)。

首先这样做:

 require "watir-webdriver/wait" 

然后试试这些:

1

 Watir::Wait.until { ... } 

2

 browser.text_field(:id => 'username').when_present.set("name") 

3

 browser.text_field(:id => 'username').wait_until_present 

请注意,“present”在这里表示“元素既存在又可见”。

您也可以使用browser.it设置超时,等待700秒,就像这样。

 client = Selenium::WebDriver::Remote::Http::Default.new client.timeout = 700 # seconds   default is 60 second ie=Watir::Browser.new:firefox, :http_client => client 

几周前我遇到了同样的问题。 关键是Watir :: Wait.until {}只等待加载主页面(主要在Firefox上测试)。 如果您有一些JavaScript代码加载其他组件,则不会等待这些代码。

因此,唯一的解决方案是pick和element并明确等待它出现(使用方法2和3)。