2012-11-08 30 views
2

只是想知道,我怎么能得到一个隐藏的元素使用watir的价值?这是元素:如何获取隐藏元素的值? (Watir)

<input type="hidden" value="randomstringhere" id="elementid" name="elementname" /> 

这是我的代码大气压:

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 

此卡的最后一行,它返回

code.rb:6:in `<main>': undefined method `attribute_value' for #<Watir::HiddenCollection:0x8818adc> (NoMethodError) 

很抱歉的基本问题,我有一个搜索,找不到任何东西。

在此先感谢!

+2

什么用的所有的全局变量?这是Ruby脚本中的一个坏迹象。 –

+0

是的,对不起,我只是把这些暂时的,作为提醒让我检查他们所有 - 我目前正在分别写所有的方法,我要去通过并修复它们全部:) – Joe

回答

6

问题

你的代码是相当接近。问题是这条线:

$grabelement = $browser.hiddens(:id, "elementid") 

这条线说要获得id为“elementid”的隐藏元素的集合(即所有)。如错误消息所示,集合没有attribute_value方法。只有元素(即集合中的对象)具有该方法。

$grabelement = $browser.hidden(:id, "elementid") 
$blah = $grabelement.value 
puts $blah 
#=> "randomstringhere" 

解决方案(假设一个隐藏的ID匹配)

假设只有一条,你应该使用hidden代替hiddens(即降s)刚刚得到的第一场比赛

请注意,对于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 
+0

啊哈!谢谢你,谢谢你,谢谢你! :) – Joe

+0

如何点击隐藏的元素?我得到了异常 - 'fxdriver.preconditions.visible':元素当前不可见,因此可能无法与(Selenium :: WebDriver :: Error :: ElementNotVisibleError)交互。我已经检查过这是唯一使用该ID的元素。 – stack1

+0

@ stack1,你为什么要点击一个隐藏的元素? Watir旨在模仿用户操作。由于用户无法点击隐藏的元素,Watir不允许它。 –