watir提供的wait方法有:
Watir::Wait.until { ... }:
等待你指定的block出現(xiàn)變?yōu)閠rue
object.when_present.set:
當(dāng)對(duì)象出現(xiàn)時(shí),你可以做點(diǎn)你set的什么
object.wait_until_present:
純粹的等待對(duì)象的出現(xiàn),什么都不干
object.wait_while_present:
純的等待直到對(duì)象消失
對(duì)于動(dòng)態(tài)頁面來說,尤其是有很多Ajax代碼的頁面,需要使用wait來進(jìn)行等待,但是watir的wait是等待頁面完成之后結(jié)束了,實(shí)際上Ajax很多代碼要在頁面load之后還在加載,這樣的話,導(dǎo)致等待無效,真正有效的是Wait_while_present
我們可以自己添加一個(gè)簡單的方法進(jìn)行處理:
def wait_for_ajax
browser.div(:id, 'ajax-loader').wait_while_present
end
默認(rèn)的等待時(shí)間是30秒,你可以通過參數(shù)去設(shè)定時(shí)間長度:
b.select_list(:id => 'entry_1').wait_until_present(100)
等待一百秒
下面是一些簡單的例子
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
b.select_list(:id => 'entry_1').wait_until_present
b.text_field(:id => 'entry_0').when_present.set 'your name'
b.button(:value => 'Submit').click
b.button(:value => 'Submit').wait_while_present
Watir::Wait.until { b.text.include? 'Thank you' }
你甚至可以使用 Implicit waits 來設(shè)置長的等待時(shí)間,例如:
require 'watir-webdriver'
b = Watir::Browser.new
b.driver.manage.timeouts.implicit_wait = 3 #3 seconds
implicit wait的長的等待時(shí)間意味著3秒之內(nèi),只要找到對(duì)象,不再等待,直接進(jìn)入下一步,而wait,要一直等到規(guī)定的時(shí)間超時(shí)才進(jìn)行下一步。