获取布尔属性的实际值

我有跨度:

Edit Member 

当我尝试获取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" 

如何获取指定属性的值而不是布尔值?

Page-Object gem的attribute方法不对属性值进行任何格式化。 它只返回从Selenium-WebDriver(或Watir-Webdriver)返回的内容。

在布尔属性的情况下,这意味着将返回true或false。 从Selenium-WebDriver#属性文档:

以下被视为“布尔”属性,并将返回“true”或“false”:

async,autofocus,autoplay,checked,compact,complete,controls,declare,defaultchecked,defaultselected,defer,disabled,draggable,ended,formnovalidate,hidden,indeterminate,iscontenteditable,ismap,itemscope,loop,multiple,muted,nohref,noresize, noshade,novalidate,nowrap,open,paused,pubdate,readonly,required,revers,scoped,seamless,seek,selected,spellcheck,truespeed,willvalidate

如您所见,“disabled”属性包含在此列表中,因此返回一个布尔值。

如果您确实想要检查实际属性值,则必须解析HTML。 除非HTML很简单,否则我建议使用Nokogiri(或其他HTML解析器)而不是编写自己的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")