2015-01-21 3 views
0

Я хотел бы создать метод Capybara для чтения содержимого таблицы, который принимает переменное количество параметров и выполняет итерацию через параметры.Зацикливание через переданные параметры в Capybara

Вот метод у меня есть:

Then /^I should see a table record with "(.*?)", "(.*?)", "(.*?)"$/ do |invisible, name, address, phone| 
    rows = page.all(".table-bordered tr") 
    expect(rows.any? { |record| record.has_content? name }).to be_true 
    rows.each do |record| 
    if record.has_content? name 
     expect(record.has_content? address).to be_true 
     expect(record.has_content? phone).to be_true 
    end 
    end 
end 

Я использую ту же структуру CSS таблицы для создания таблиц с гораздо большим числом столбцов в других частях программы. Итак, имеет ли таблица 3 столбца или 12, я хотел бы иметь возможность использовать один и тот же метод, поэтому я не пишу неудобный код.

Как назначить переменное количество параметров и пропустить каждый параметр в Capybara?

ответ

0
def assert_my_table(name, *row_data) 
    # It will be much faster than looping through all rows 
    row = page.find(:xpath, "//*[@class='table-bordered']//tr[./td='#{name}']") 

    # retrive row contents only once (again, it will be faster than retrieving it again for each of the columns you want to assert) 
    row_text = row.text 

    row_data.each do |text| 
    expect(row_text).to include(text) 
    end 
end 
assert_my_table(name, address, phone)