2016-07-26 8 views
1

Я использую огурец с веб-рубином Ruby и Watir.Как использовать таблицу в огурце с Ruby для проверки данных на веб-форме

То, что я пытаюсь сделать, это проверить, что данные, предварительно заполненные в веб-форме, соответствуют данным в таблице в файле функций в Cucumber. Мне нужна помощь в написании кода Ruby в файле определений шагов. Вот что у меня есть до сих пор:

Cucumber feature: 
Then I will be able to view my information pre-populated from IAM as follows: 

|First Name/Given Name |Chimwemwe  | 
|Last Name/Surname  |Rossi   | 
|Country    |USA    | 
|Address    |fdafda   | 
|City     |fdafd   | 
|State     |Louisana  | 
|Postal Code   |99999   | 

Then (/^I will be able to view my information pre-populated from IAM.$/) do |table| 
    information = table.rows_hash 
    information.each do |entry| 
    contact_info = entry [0] 
    if @browser.text_field(:name=>'firstName').verify_contains(contact_info[0])==true 
     puts "Passed" 
    else 
     puts "Failed" 
    end 
end 

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

Когда я пытаюсь запустить скрипт, все, что я получаю, это ошибка: #table - это огурец :: Core :: Ast :: DataTable.

Я довольно новичок в Ruby/Cucumber, и это самый сложный сценарий, который я написал до сих пор. Любая помощь в том, как это сделать, будет действительно полезна. Я знаю, что мне нужен массив, но я смотрел на такую ​​большую часть этого онлайн, я чувствую, что мой мозг собирается взорваться. Благодарю.

+0

Где 'verify_contains' родом? Я не думаю, что это Ватир, так вы используете другой камень, чтобы дополнить Ватира? –

+0

Возможно, вы захотите просмотреть https://github.com/styleguide/ruby/syntax .. это не поможет вам с реальным кодом (например, как получить доступ к элементам хэша), но это поможет вам представить код в способ, который по крайней мере выглядит как правильный рубиновый код ;-) –

ответ

1

Если у вас нет простого способа сопоставить таблицу Cucumber с полями Watir, то итерация может оказаться непригодной. Самый простой подход - проверить, что каждое тестируемое поле соответствует таблице.

Я не уверен, утверждение библиотеки вы используете, но в качестве примера, ниже использует ожидание RSpec:

Then (/^I will be able to view my information pre-populated from IAM.$/) do |table| 
    information = table.rows_hash 

    expect(@browser.text_field(:name=>'firstName').value).to eq(information['First Name/Given Name']) 
    expect(@browser.text_field(:name=>'lastName').value).to eq(information['Last Name/Surname']) 
    # etc. for each field 
end 

Обратите внимание, что тест потерпит неудачу на первое неправильное поле. Если вы хотите, чтобы утверждать все поля сразу, вы можете получить их в Hash и сравнить его с таблицей:

Then (/^I will be able to view my information pre-populated from IAM.$/) do |table| 
    form_fields = { 
    'First Name/Given Name' => @browser.text_field(:name=>'firstName').value, 
    'Last Name/Surname' => @browser.text_field(:name=>'lastName').value 
    } 
    expect(form_fields).to eq(table.rows_hash) 
end 
+0

Спасибо, Джастин. Второй вариант работал отлично. Я решил, что именно так мне придется это делать, но этот вариант поддерживает скрипт, даже если одна из валидаций завершилась неудачей. – Laura