我有跨度:
<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 :(得分: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")