gpt4 book ai didi

ruby - 使用 WATIR 进行表迭代

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:29 25 4
gpt4 key购买 nike

我的页面中有一个表需要处理,为此我使用以下代码

b.table(:id,'something').rows.each_with_index do |row,index|
puts row.cell(:index,1).text
if index.eql?3
row.cell(:index,0).image.click
end
end

除非表格收缩和扩展,否则它工作正常。在我的表格的第一列中有“加号”按钮,如果我单击该按钮,表格会展开并显示更多行数,一旦单击它就会变成“减号”符号,如果我再次单击该“减号”符号,它会再次出现收缩。我的问题是,如果通过单击加号按钮展开表格(如我在索引达到 3 时单击的程序所示),则不会执行其余行(从 4 行开始)。据我所知,我猜对象位置发生了变化,所以要获取所有行,我需要再次执行'b.table(:id,'something').rows',这样新扩展的表就可以正常工作了,所以无论如何我可以在不终止循环的情况下避免这个问题吗?

最佳答案

一旦调用 b.table(:id,'something').rows,行就已经是一个固定的 ruby​​ 数组。 下面的任何内容都不能更改该数组,如果您尝试在循环内更改该数组,ruby 很可能会报错。

所以你有两个选择:

  1. 再次调用table.rows
  2. 调用 b.button(...).click 然后只调用一次 table.rows

希望这对您有所帮助。

补充说明:不,不可能执行您想要的操作。 #rows 实际上返回 Watir::ElementCollection#each_with_index 调用 #each 如果您查看 #each源码,你会看到:

def each(&blk)
to_a.each(&blk)
end

#to_a 生成一个包含元素的新数组对象。基本上你得到一个行数组并迭代它们。 Watir 幸运的是 不会在页面更改时变得聪明并从脚下更改您请求的数组。在遍历数组的同时更改数组实际上是一个非常糟糕的主意。结果将不可预测。这就是每次要查看当前页面状态时都需要调用 table(...).rows 的原因。

正如我所说,点击您的按钮不需要遍历表格。您可以通过 xpathcss 直接访问它。

关于ruby - 使用 WATIR 进行表迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30422459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com