在ruby中将所有xpath结果收集到一个数组中

在ruby中将所有xpath结果收集到一个数组中,ruby,tags,automation,watir,Ruby,Tags,Automation,Watir,我有一个代码非常糟糕的JSP,我正试图在其上运行自动化。有一系列的复选框,其名称(无ID)为“删除[x]”,其中x是填充的项目的项目编号。我正在尝试选择所有复选框,以便删除每个条目。这是我的 check_boxes = [] check_boxes.push(@browser.checkbox(:xpath, "//input[contains(@name,'delete')]")) puts check_boxes.size check_boxes.each do |check_box| c

我有一个代码非常糟糕的JSP,我正试图在其上运行自动化。有一系列的复选框,其名称(无ID)为“删除[x]”,其中x是填充的项目的项目编号。我正在尝试选择所有复选框,以便删除每个条目。这是我的

check_boxes = []
check_boxes.push(@browser.checkbox(:xpath, "//input[contains(@name,'delete')]"))
puts check_boxes.size

check_boxes.each do |check_box|
check_box.set
问题是它只选择与xpath匹配的第一个实例(节点)以转储到数组中。我知道我可以在xpath中迭代,向节点添加一个索引,然后在索引超出范围时加入一个援救,将我从中解救出来,但这似乎是一种肮脏的做法


我知道有一个“as”标记可以获得一组锚点,我想知道是否有这样的方法可以选中所有复选框,我认为问题不在于xpath本身。正是
@browser.checkbox
导致仅返回第一个复选框

如果需要所有匹配的复选框,应使用(注意复数形式):

请注意,
复选框
返回复选框的集合。除非您正在做一些非常奇特的事情,否则通常不需要将其转换为数组

您可以简单地执行以下操作:

@browser.checkboxes(:name => /delete/).each do |checkbox|
  checkbox.set
end

它们返回结果集的第一个元素。您可以通过在xpath的末尾添加一个索引来追加它,但仍然只能得到1个结果,这是ruby的动态语言
@browser.checkboxes(:name => /delete/).each do |checkbox|
  checkbox.set
end