Joe*_*Joe 2 html ruby ruby-on-rails watir
只是想知道,如何使用watir获取隐藏元素的值?这是元素:
<input type="hidden" value="randomstringhere" id="elementid" name="elementname" />
Run Code Online (Sandbox Code Playgroud)
这是我的代码atm:
require "rubygems"
require "watir-webdriver"
$browser = Watir::Browser.new :ff
$browser.goto("http://www.site.com")
$grabelement = $browser.hiddens(:id, "elementid")
$blah = $grabelement.attribute_value("value")
puts $blah
Run Code Online (Sandbox Code Playgroud)
这会停留在它返回的最后一行
code.rb:6:in `<main>': undefined method `attribute_value' for #<Watir::HiddenCollection:0x8818adc> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
对不起基本问题,我有一个搜索,找不到任何东西.
提前致谢!
问题
你的代码非常接近.问题是这条线:
$grabelement = $browser.hiddens(:id, "elementid")
Run Code Online (Sandbox Code Playgroud)
该行表示获取具有id"elementid"的隐藏元素的集合(即所有).如错误消息所示,该集合没有attribute_value方法.只有元素(即集合中的对象)才具有该方法.
解决方案(假设单个隐藏匹配id)
假设只有一个,你应该使用hidden而不是hiddens(即删除s)获得第一个匹配:
$grabelement = $browser.hidden(:id, "elementid")
$blah = $grabelement.value
puts $blah
#=> "randomstringhere"
Run Code Online (Sandbox Code Playgroud)
请注意,对于value属性,您可以.value代替.attribute_value('value').
解决方案(如果有多个匹配id的hiddens)
如果实际上有多个,那么你可以遍历集合或者只是得到第一个,等等:
#Iterate over each hidden that matches
browser.hiddens(:id, "elementid").each{ |hidden| puts hidden.value }
#Get just the first hidden in the collection
browser.hiddens(:id, "elementid").first.value
Run Code Online (Sandbox Code Playgroud)