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"

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

4

1 回答 1

0

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

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

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

异步,自动对焦,自动播放,检查,紧凑,完整,控件,声明,defaultchecked,defaultselected,延迟,禁用,可拖动,结束,formnovalidate,隐藏,不确定,iscontenteditable,ismap,itemscope,循环,多个,静音,nohref,noresize, noshade、novalidate、nowrap、打开、暂停、发布日期、只读、必需、反转、范围、无缝、搜索、选择、拼写检查、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")
于 2015-06-22T16:24:05.103 回答