Нужна помощь в цикле n строк в таблице? - PullRequest
2 голосов
/ 21 мая 2011

Мне нужна помощь в итерации таблицы, состоящей из n строк.

Имя таблицы: Table = $ 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

Error

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>'

Так что я думаю, что нам нужно использовать (как, что) выражения, можете ли вы помочь мне, как использовать эти выражения в каждой команде?

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

Попробуйте изменить:

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 голос
/ 23 мая 2011

может быть частью проблемы здесь может быть нумерация индексации ячейки под watir-webdriver?

в качестве тактики устранения неполадок, вы можете попробовать просто использовать .flash для ячеек, чтобы убедиться, что вы смотрите направильные

вместо того, чтобы пытаться манипулировать списком выбора, может быть просто

row[5].flash unless row[4] == '' 

или даже просто изменить внутренний цикл на что-то столь же простое, как

row[4].flash

, чтобы быть увереннымон смотрит на правильные ячейки.

Если он смотрит на правильные ячейки, то, возможно, попытайтесь идентифицировать список select_list по индексу (он должен быть единственным в ячейке)

Другая вещьесли строка заголовка есть, и в этой строке есть текст, возможно, она пытается найти список выбора в этой строке и не работает .. поэтому вам, возможно, придется искать, возможно, более конкретный текст, чем просто «не пустой», так какбыли .. Есть ли шаблон текста, который появляется в нужных ячейках, который будет отличаться от строки заголовка, что позволит вам лучше соответствовать тому, что вы ищетеили в этом 4-м столбце?

...