我正在使用Cucumber和Ruby以及Watir webdriver。
我要做的是验证预先填充在Web表单上的数据是否与Cucumber中的features文件中的表中的数据相匹配。我需要帮助在步骤定义文件中编写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是一个Cucumber :: Core :: Ast :: DataTable。
我是Ruby / Cucumber的新手,这是我迄今为止编写的最复杂的脚本。任何有关如何做到这一点的帮助将非常有帮助。我知道我需要一个阵列,但我一直在网上看这么多,我觉得我的大脑会爆炸。谢谢。
答案 0 :(得分:1)
除非您有一种简单的方法将Cucumber表映射到Watir字段,否则迭代可能没用。最简单的方法是直接检查测试中的每个字段是否与表格匹配。
我不确定您使用的是哪个断言库,但作为示例,以下内容使用了RSpec Expectations:
<td><button type="button" id="edit" value="" class="btn btn-lg btn-link" data-toggle="tooltip" title ="Edit" style="color: black"><i class="glyphicon glyphicon-edit"></i></td>
请注意,测试将在第一个不正确的字段中失败。如果要一次声明所有字段,可以将它们检索到$(document).ready(function () {
$("#edit").click(function () {
var currentTD = $(this).parents('tr').find('td');
if( $(this).find('i').hasClass('glyphicon-edit'))
{
currentTD = $(this).parents('tr').find('td');
$.each(currentTD, function () {
$(this).prop('contenteditable', true);
$(this).css('background','yellow');
});
}
else if( $(this).find('i').hasClass('glyphicon-ok-circle'))
{
$.each(currentTD, function () {
$(this).prop('contenteditable', false);
$(this).css('background','');
});
}
$(this).find('i').toggleClass('glyphicon-edit').toggleClass('glyphicon-ok-circle');
})
});
并将其与表格进行比较:
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