使用 Capybara 查找 JQuery/AngularJS 向元素添加的数据
Find JQuery/AngularJS added data to an element with Capybara
我需要测试一个网页,其中 jQuery/AngularJS 向元素的属性添加一些数据,在本例中 'value',默认 select 不可见要么。我正在使用带有 Poltergeist 的 Capybara。我想验证元素值,但标准方法失败:
expect(find(:xpath, "//input[@type='text']").value).to eq('3')
或
find("//input[@type='text']/@value='3'")
元素看起来像这样(值显示在属性中):
<input type="text" ng-model="link.days_until_expiration" placeholder="Never" maxlength="4" ng-change="passPositiveNumbers(link);" class="ng-pristine ng-valid">
在 Chrome 控制台中,我可以 select 使用
$('input[type="text"]').data('value', '3')
但是Capybara没有数据方法
JS 会影响值 属性 而不是值属性,这意味着你不能使用 xpath 查询它(你只能查询页面 load/parse 上的值属性time) - 如果它是 'Never' 作为 placeholder/id/name/label 的唯一输入,或者您可以使用父元素来限定它的范围,因此它是唯一匹配的输入,那么以下应该有效(用找到的页面替换页面父元素(如果需要作用域)
expect(page).to have_field('Never', with: '3')
我需要测试一个网页,其中 jQuery/AngularJS 向元素的属性添加一些数据,在本例中 'value',默认 select 不可见要么。我正在使用带有 Poltergeist 的 Capybara。我想验证元素值,但标准方法失败:
expect(find(:xpath, "//input[@type='text']").value).to eq('3')
或
find("//input[@type='text']/@value='3'")
元素看起来像这样(值显示在属性中):
<input type="text" ng-model="link.days_until_expiration" placeholder="Never" maxlength="4" ng-change="passPositiveNumbers(link);" class="ng-pristine ng-valid">
在 Chrome 控制台中,我可以 select 使用
$('input[type="text"]').data('value', '3')
但是Capybara没有数据方法
JS 会影响值 属性 而不是值属性,这意味着你不能使用 xpath 查询它(你只能查询页面 load/parse 上的值属性time) - 如果它是 'Never' 作为 placeholder/id/name/label 的唯一输入,或者您可以使用父元素来限定它的范围,因此它是唯一匹配的输入,那么以下应该有效(用找到的页面替换页面父元素(如果需要作用域)
expect(page).to have_field('Never', with: '3')