2015-06-22 61 views
1

我有跨度:獲取一個布爾值屬性的實際值

<span disabled="disabled">Edit Member</span> 

當我試圖讓disabled屬性的值:

page.in_iframe(:id => 'MembersAreaFrame') do |frame| 
    expect(page.span_element(:xpath => "//span[text()='Edit Member']", :frame => frame).attribute('disabled')).to eq("disabled") 
end 

我得到:

expected: "disabled" 
    got: "true" 

如何獲取指定屬性的值而不是布爾值?

+0

'.... attribute('disabled').value'。 – mudasobwa

+0

得到'未定義的方法'值爲「真」:字符串錯誤 –

回答

0

頁面對象gem的attribute方法不執行任何格式的屬性值。它只是返回從Selenium-WebDriver(或Watir-Webdriver)返回的內容。

在布爾屬性的情況下,這意味着將返回true或false。從Selenium-WebDriver#attribute文檔:

以下行爲被認爲是「布爾」屬性,將返回 無論是「真」或「假」:

異步,支持自動對焦,自動播放,檢查,緊湊,完整的, 聲明,defaultchecked,默認選擇,延遲,禁用,可拖動, 結束,formnovalidate,隱藏,不確定,iscontenteditable, ismap,itemscope,循環,多重,靜音,nohref,noresize,noshade, novalidate,nowrap,open ,暫停,pubdate,只讀,必需, 反轉,範圍,s eamless,尋找,選擇,拼寫檢查,truespeed, willvalidate

正如你所看到的,「已禁用」屬性包含在該列表中,因此返回一個布爾值。

如果你真的想檢查實際的屬性值,你將不得不解析HTML。除非HTML很簡單,否則我會建議使用Nokogiri(或其他HTML解析器),而不是編寫自己的。在Nokogiri:

require 'nokogiri' 

# Get the HTML of the span 
span_html = page.in_iframe(:id => 'MembersAreaFrame') do |frame| 
    page.span_element(:xpath => "//span[text()='Edit Member']", :frame => frame).html 
end 

# Parse the span 
doc = Nokogiri::HTML.fragment(span_html) 
root_element = doc.at_css('*') 

# Check the disabled attribute of the root element (ie the span) 
expect(root_element['disabled']).to eq("disabled")