尝试使用 id 区分两个隐藏值
Trying to distinguish between two hidden values using an id
从我对 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 相对时,它正在更新股票标志,而不是已发布的状态(我假设这是因为它是这个 '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")
如有任何帮助,我们将不胜感激。
问题实际上出在 form_element
的位置,而不是按钮的点击方式。
行:
form_element = $browser.hidden(:name => 'shopProductVariantHeadingID', :value => "#{@@prodvarid}").parent
将始终return 缺货形式;从来没有未发布的形式。这是因为 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
从我对 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 相对时,它正在更新股票标志,而不是已发布的状态(我假设这是因为它是这个 '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")
如有任何帮助,我们将不胜感激。
问题实际上出在 form_element
的位置,而不是按钮的点击方式。
行:
form_element = $browser.hidden(:name => 'shopProductVariantHeadingID', :value => "#{@@prodvarid}").parent
将始终return 缺货形式;从来没有未发布的形式。这是因为 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