调用隐藏值会使用watir-webdriver触发ruby中的错误

时间:2014-09-18 13:34:56

标签: ruby automation watir watir-webdriver

我目前仍在学习ruby并且在为我们的内部CMS系统编写自动化套件时学习进展缓慢,但在尝试删除图像条目时我遇到了问题。

最基本的是,当一个新图像被添加到库中时,它会根据项目设置一个ID,该项目在分配后保持静态。感谢Justin Ko,我可以修改项目,但现在我想通过ruby和watir-webdriver调用项目的删除按钮。

有问题的ID所在的块的HTML代码是:

 <form action="" method="get" style="float:left; margin-bottom: 0; padding-right: 5px; padding-top: 5px">
 <input type="hidden" name="module" value="image" id="module" />
 <input type="hidden" name="action" value="amend" />
 <input type="hidden" name="imageHeadingID" value="152" />
 <input type="submit" name="submitButton" value="Amend" class="btn btn-primary btn-small" />
 </form>

<form action="" method="get" style="float:left; margin-bottom: 0; padding-top: 5px">
<input type="hidden" name="module" value="image" id="module" />
<input type="hidden" name="action" value="amend" />
<input type="hidden" name="imageHeadingID" value="152" />
<input type="submit" name="submitButton" value="Delete" class="btn btn-danger btn-small" />
</form>

使用;

在图像条目创建阶段提取数值id作为引用
@@grabelement = $browser.hidden(:name, "imageHeadingID")
@@id = @@grabelement.value

调用我使用的'修正'功能时;

form_element = $browser.hidden(:name => 'imageHeadingID', :value => "#{@@id}").parent
form_element.button(:value => 'Amend').click

试图调用我正在使用的'删除'功能时;

form_element = $browser.hidden(:name => 'imageHeadingID', :value => "#{@@id}").parent
form_element.button(:value => 'Delete').click 

但修改代码有效,使用删除代码会触发;

的例外
Watir::Exception::UnknownObjectException: unable to locate element, using {:value=>"Delete", :tag_name=>"button"}

鉴于两者基本上是相同的功能,我无法理解为什么我会收到此错误或如何解决它。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

问题在于:

form_element = $browser.hidden(:name => 'imageHeadingID', :value => "#{@@id}").parent

这就是找到名为“imageHeadingID and value”152“的第一个隐藏输入。换句话说,代码期望Amend和Delete按钮的格式相同:

<form action="" method="get" style="float:left; margin-bottom: 0; padding-right: 5px; padding-top: 5px">
  <input type="hidden" name="module" value="image" id="module" />
  <input type="hidden" name="action" value="amend" />
  <input type="hidden" name="imageHeadingID" value="152" />
  <input type="submit" name="submitButton" value="Amend" class="btn btn-primary btn-small" />
  <input type="submit" name="submitButton" value="Delete" class="btn btn-danger btn-small" />    
</form>

您将需要查找隐藏字段的兄弟“删除”按钮。一种方法是遍历按钮以找到具有预期兄弟的按钮:

# Amend
button = $browser.buttons(:value => 'Amend').find { |button| 
  button.parent.hidden(:name => 'imageHeadingID', :value => "#{@@id}").exists?
}
button.click

# Delete
button = $browser.buttons(:value => 'Amend').find { |button| 
  button.parent.hidden(:name => 'imageHeadingID', :value => "#{@@id}").exists?
}
button.click

有些人可能更喜欢在这些类型的情况下使用CSS选择器(或XPath):

# Amend
button = $browser.button(:css => "input[name='imageHeadingID'][value='#{@@id}'] ~ input[value='Amend']")
button.click

# Delete
button = $browser.button(:css => "input[name='imageHeadingID'][value='#{@@id}'] ~ input[value='Delete']")
button.click