无法使用Watir单击相同的元素类

时间:2017-10-11 04:04:43

标签: ruby selenium automation cucumber watir

我有以下屏幕: enter image description here 我使用以下Ruby脚本单击“添加新”按钮:

vendorTab = driver.a id: "tab-master-tab-vendor"
  vendorTab.wait_until_present
  if vendorTab.exists?
    vendorTab.click
  end

  addNewButton = driver.button class: ['btn btn-primary']
  addNewButton.wait_until_present
  if addNewButton.exists?
      addNewButton.click
  end

但是,当我移动到另一个选项卡并尝试单击相同的“添加新”按钮时,Ruby脚本不起作用。 enter image description here 我的Ruby代码有什么问题吗?

buildingTypeTab = driver.a id: "tab-master-tab-building"
buildingTypeTab.wait_until_present
if buildingTypeTab.exists?
  buildingTypeTab.click
end

  addNewButton = driver.button class: ['btn btn-primary']
  addNewButton.wait_until_present
  if addNewButton.exists?
      addNewButton.click
  end

我感谢你的帮助。非常感谢你。

2 个答案:

答案 0 :(得分:3)

我猜所有这些标签都属于同一个网页?即,所有HTML都在同一个HTML中?

如果是这种情况,driver.button class: ['btn btn-primary']将在HTML中找到第一个实例时停止,但这不是您每次都要查找的按钮(它是第一个选项卡中的按钮,您的脚本按预期工作的地方。)

我心中最好的选择是

  • 找到一种方法来唯一标识每个标签中的按钮(例如,如果可能,请使用id代替class)或
  • 将所有按钮拉入集合,然后在确定哪个索引与每个选项卡对齐后,使用其集合索引单击该按钮。例如,

button_collection = browser.buttons(:class, ['btn', 'btn-primary']) button_collection[2].click # Will click the 3rd button in the collection

答案 1 :(得分:0)

阅读pjd的建议后, 我修改了一下,让它像这样工作:

buildingTypeTab = driver.a id: "tab-master-tab-building"
buildingTypeTab.wait_until_present
if buildingTypeTab.exists?
  buildingTypeTab.click
end

  addNewButton = driver.button(:class => ['btn btn-primary'], :index => 2)
  addNewButton.wait_until_present
  if addNewButton.exists?
      addNewButton.click
  end

正如pjd所说,是的,所有这些标签都是同一个HTML的一部分

谢谢。