需要帮助循环表中的n行?

时间:2011-05-21 18:01:34

标签: ruby watir

我需要帮助迭代循环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'命令中使用这些表达式吗?

2 个答案:

答案 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>