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

Can Not Click The Same Element Class Using Watir

我有以下屏幕: 我使用以下 Ruby 脚本来单击 "Add New" 按钮:

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

但是,当我移动到另一个选项卡并尝试单击同一个 "Add New" 按钮时,Ruby 脚本不起作用。 我的 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

感谢您的帮助。非常感谢。

我猜所有这些选项卡都是同一个网页的一部分?即,全部相同 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

看了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

谢谢。