2013-09-26 64 views
0

我現在有紅寶石的工作一塊,看起來像這樣:使用Ruby等待網頁加載的元素

def error_message 
    browser.span(:id => 'ctl00_cphMainContent_lblMessage').wait_until_present(30) do 
     not errors.empty? 
    end 
    errors 
    end 

不過,我喜歡的東西更是這樣的:

span(:errors, :id => 'ctl00_cphMainContent_lblMessage') 


##farther down## 


def error_message 
    browser.errors.wait_until_present(30) do 
etc... 

我是Ruby的新手,但是如何做到這一點?

回答

0

通常,您使用Watir::Wait.until<element>.wait_until_present方法。

通過這種方式,你可以這樣做:

# Earlier in code 
@browser = Watir::Browser.start('http://mypage.com/') 
# ... 
errors = { my_first_error: "You forgot your keys in the car!" } 

check_for_errors(error[:my_first_error]) 

# Wherever 
def check_for_errors(error, expiry=30) 
    error_element = @browser.span(:id => 'ctl00_cphMainContent_lblMessage') 
    error_element(value: error).wait_until_present(expiry) 
end 

更多信息,請參見watir documentation

+0

'wait_until_present'方法完美地工作。問題是我必須每次指定元素。每次我需要等待標籤消息時,我寧願重複使用稱爲'錯誤'的東西,或者直接指定'span(:id =>'blahblahblah')的通用東西。 – user2040277

+0

如果你知道你可以提出的每一個錯誤的文字,你可以用這些符號填充散列,然後基於包含文本的頁面進行搜索(即:'browser.text.include?errors [:my_first_error]'),但是變得非常脆弱。如果你只是想全面搜索錯誤,你可以使用'browser.text.include? 「錯誤!」,替換「錯誤!」與任何你在每個錯誤前面的文字。 – Momer

+0

如果有幫助,你能選擇一個答案嗎? – Momer