我如何使用watir :: waiter :: wait_until强迫Chrome等待?
-
08-10-2019 - |
题
我试图告诉我的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的新手,我昨天才刚刚捡起它,所以我一半希望这是我鲁sious的结果。
如果相关,我正在使用Mac(OSXv。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
请注意,这里的“存在”的意思是“两者都存在并且可见”。
其他提示
您还可以使用浏览器设置超时。它将等待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.til {}仅等待主页加载(主要在Firefox上测试)。如果您有一些JavaScript代码加载其他组件,则将不等待。
因此,唯一的解决方案是选择和元素,并明确等待它出现(使用方法2和3)。
不隶属于 StackOverflow