从我仍在大杂烩中学习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")
任何帮助将不胜感激。
答案 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