尝试使用id区分两个隐藏值

时间:2015-04-24 08:28:30

标签: ruby automation watir

从我仍在大杂烩中学习ruby + watir的另一个问题。

CMS我正在编写自动化以创建项目并为其分配一个ID,此时我执行下面的代码来收集和存储id,因为这用于针对该项目的其他操作。

@@grabprodvarelement = $browser.hidden(:name, "shopProductVariantHeadingID")
@@prodvarid = @@grabprodvarelement.value

创建后,有两个按钮可控制商品是库存还是缺货以及是否已发布或未发布。

通常,我用来更新发布状态的代码是

form_element = $browser.hidden(:name => 'shopProductVariantHeadingID', :value => "#{@@prodvarid}").parent
form_element.button(:value => 'Change').click

但是,在这种情况下,当针对下面的html运行时,它正在更新stock标志,而不是已发布状态(我认为这是因为它是此'change'值的第一个实例)。

<td>
<span class="label label-important">Out of Stock</span>
<form action method='post' class='pull-right'>
<input type='submit' name='inStockChange' value='Change' class='btn btn-mini btn-secondary' style='float:right'>
<input type='hidden' name='shopProductVariantHeadingID' id='14' value ='14'>
<input type='hidden' name='stockChange' id='No' value ='No'>
</form>
</td>
<td>
<span class="label">Un-Published</span>
<form action method='post' class='pull-right'>
<input type='submit' name='publish' value='Change' class='btn btn-mini btn-secondary' style='float:right'>
<input type='hidden' name='shopProductVariantHeadingID' id='14' value ='14'>
<input type='hidden' name='published' id='No' value ='No'>
</form>
</td>

我已尝试更新我使用的代码;

form_element = $browser.hidden(:name => 'shopProductVariantHeadingID', :value => "#{@@prodvarid}").parent
form_element.button(:name => 'publish').click

我认为这足以识别正确的点击条目但是,我得到了错误;

Watir::Exception::UnknownObjectException: unable to locate element, using (:name=>"publish", :tag_name=>"button")

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题实际上与form_element的定位方式有关,而不是单击按钮的方式。

该行:

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

将始终返回缺货表格;从来没有发表过的形式。这是因为Watir会找到第一个匹配的隐藏元素,它是Out of Stock形式中的一个。这会导致form_element.button(:value => 'Change')点击第一个更改按钮而form_element.button(:name => 'publish')不存在。

需要根据shopProductVariantHeadingID以及已发布的按钮来定位表单元素:

form_element = $browser.forms.find do |form|
  form.hidden(:name => 'shopProductVariantHeadingID', :value => "#{@@prodvarid}").exists? && 
  form.button(:name => 'publish').exists?
end
form_element.button(:value => 'Change').click