Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 尝试使用id区分两个隐藏值_Ruby_Automation_Watir - Fatal编程技术网

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

Ruby 尝试使用id区分两个隐藏值,ruby,automation,watir,Ruby,Automation,Watir,从我对ruby+watir的大杂烩式学习中又得到了一个问题 我为之编写自动化的CMS创建一个项目并为其分配一个id,此时我执行下面的代码来收集和存储id,因为这用于针对该项目的其他操作 @@grabprodvarelement = $browser.hidden(:name, "shopProductVariantHeadingID") @@prodvarid = @@grabprodvarelement.value 创建后,有两个按钮控制项目是否有库存、是否已发布或未发布 通常我用来更新发布

从我对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运行时,它正在更新股票标志,而不是发布状态(我假设这是因为它是这个“更改”值的第一个实例)

我认为这足以确定要单击的正确条目,但是,我得到了错误

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

任何帮助都将不胜感激。

问题实际上在于
表单元素的定位方式,而不是按钮的单击方式

该行:

form_element = $browser.hidden(:name => 'shopProductVariantHeadingID', :value => "#{@@prodvarid}").parent
将始终返回缺货表格;从未公开过。这是因为Watir将找到第一个匹配的隐藏元素,即缺货表单中的元素。这会导致
表单元素.button(:value=>'Change')
单击第一个更改按钮,而
表单元素.button(:name=>'publish')
不存在

表单元素需要根据ShopProductVarianteAdingID以及published按钮进行定位:

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

尝试
form\u element.element(:name,'publish')。单击
是否可以检查此按钮是否存在?另请检查是否存在
$browser.hidden(:name=>'shopProductVariateAdingId',:value=>“#{@prodvarid}”)
你好,Alex,是的。如果我使用If语句来表示exists?它确认元素的存在以及按钮
form_element = $browser.hidden(:name => 'shopProductVariantHeadingID', :value => "#{@@prodvarid}").parent
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