我需要帮助迭代循环n行的表。
表名:表= $ b.table(:id,/ grid /)
1 2 3 4 5
2 100 2000
3 150 3000 text dropdown
4 200 4000
5 250 5000 text dropdown
n 300 6000
但是,当我使用以下代码时,我收到以下错误消息
browser.table(:id, /grid/).rows.each do |row|
row[5].select("Value from the dropdown") if row[4].text.exists?
end
错误
C:/Watir Scripts/Project/Debit.rb:58:in `block in report': undefined method `exists?' for "Account Number":String (NoMethodError)
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.2.3/lib/watir-webdriver/element_collection.rb:21:in `each'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.2.3/lib/watir-webdriver/element_collection.rb:21:in `each'
from C:/Watir Scripts/Project/Debit.rb:57:in `report'
from driver.rb:36:in `run'
from driver.rb:42:in `<main>'
所以我试着调整脚本并写下如下。
browser.table(:id, /Grid/).rows.each do |row|
if row[4].text!= ""
row[5].select("Value from the dropdown")
end
然后我收到以下错误消息。
C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.2.3/lib/watir-webdriver/container.rb:36:in `extract_selector': expected Hash or (:how, 'what'), got ["Exclude: Duplicate Account"] (ArgumentError)
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.2.3/lib/watir-webdriver/elements/generated.rb:2163:in `select'
from C:/Watir Scripts/Project/Credit.rb:53:in `block in report'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.2.3/lib/watir-webdriver/element_collection.rb:21:in `each'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.2.3/lib/watir-webdriver/element_collection.rb:21:in `each'
from C:/Watir Scripts/Project/Debit.rb:51:in `report'
from driver.rb:36:in `run'
from driver.rb:42:in `<main>'
所以我认为我们需要使用(如何,什么)表达式,你能帮助我如何在'each'命令中使用这些表达式吗?
答案 0 :(得分:2)
尝试更改:
row[5].select("Value from the dropdown")
为:
row[5].select_list.select("Value from the dropdown")
要了解正在发生的事情,请查看您获得的类型
row[5] #=> #<Watir::TableCell>
row[5].select_list #=> #<Watir::Select>
(调用NoMethodError
时未收到TableCell#select
的原因是因为#select
是#select_list
的别名 - 代码生成的副作用的Watir-的webdriver)。
答案 1 :(得分:1)
这里的部分问题可能是在watir-webdriver下基于零的索引吗?
作为一种故障排除策略,您可以尝试在单元格上使用.flash以确保您正在查找正确的
而不是试图操纵select_list而不是
row[5].flash unless row[4] == ''
甚至只需将内循环更改为
这样简单的内容row[4].flash
确保它正在查看正确的细胞。
如果它正在查看正确的单元格,那么可能尝试通过索引识别select_list(它应该是单元格中唯一的单元格)
另一件事是,如果有一个标题行,并且该行中有文本,它可能会尝试在该行上找到一个选择列表而失败..所以你可能需要查找可能更具体的文本而不仅仅是'not blank'就是这样..是否有一个图案出现在你想要的单元格中,与标题行不同,这样可以让你更好地匹配你在第四列中寻找的内容? / p>