2013-01-07 41 views
2

我知道方法Element#wait_until_present(t),但是如果此方法超時,則會拋出timeOut異常。等待元素如果超時,不會拋出異常

有沒有一種方法只需等待t秒,然後在元素出現時返回true,否則返回false?

我知道這可以用簡單的begin..rescue..end聲明來完成,但我正在尋找一些不使用異常的東西。

+1

沒有。這種方法提出了一個例外,這種非特異性的東西肯定是不幸的,但只要寫下自己的擴展名並完成它即可。 – tokland

回答

4

你可以寫一個短手rescue條款是這樣的:

element_present = browser.element.wait_until_present rescue false 
puts "element not present" unless element_present 

但這不過導致在全部false值上的任何Exception並不僅僅是TimeoutError。我仍然喜歡使用它,因爲如果有任何Exception,那麼假定該元素不存在會更安全。

1

如果你不想例外下面的代碼就可以得心應手:

睡眠「你的時間在這裏」如:睡眠20 - 這將等待20秒。

然後檢查您的元素現在:

'your element'.exists? - 這將返回真/假

你不會以這種方式得到例外。

另一個最好的方法是根據您的需要編寫您的wait_for_load方法。

+0

無論如何,'睡眠t'選項會迫使我無論睡眠時間爲't'秒。我更願意寫我自己的方法,就像我在答覆中所做的那樣,我只是在幾秒後發佈:) – MichaelR

3

貌似沒有其他的方法,會做什麼我要找的,

所以這裏是實現這一目標的最簡單的方法:

#check method for Element#wait_until_present(t) 
def check_if_present(element,t) 
    raise ArgumentError, 't must be a number ' unless t.is_a? Numeric 
    begin 
     element.wait_until_present(t) 
     true 
    rescue Watir::Wait::TimeoutError 
     false 
    rescue 
     raise "Something wrong with the element" 
    end 
end