获取布尔属性的实际值

时间:2015-06-22 14:48:10

标签: ruby page-object-gem rspec3 rspec-expectations

我有跨度:

<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"

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

1 个答案:

答案 0 :(得分:0)

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

对于布尔属性,这意味着将返回true或false。来自Selenium-WebDriver#attribute文档:

  

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

     

async,autofocus,autoplay,checked,compact,complete,controls,   declare,defaultchecked,defaultselected,defer,disabled,draggable,   结束,formnovalidate,隐藏,不确定,iscontenteditable,   ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,   novalidate,nowrap,open,paused,pubdate,readonly,required,   颠倒,范围,无缝,寻求,选择,拼写检查,truespeed,   willvalidate

正如你所看到的,&#34;禁用&#34;属性包含在此列表中,因此返回一个布尔值。

如果您确实要检查实际属性值,则必须解析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")