使用Capybara查找JQuery/AngularJS向元素添加的数据

使用Capybara查找JQuery/AngularJS向元素添加的数据,jquery,angularjs,capybara,poltergeist,Jquery,Angularjs,Capybara,Poltergeist,我需要测试一个web页面,其中jQuery/AngularJS将一些数据添加到元素的属性中,在本例中为“value”,默认选择器不可见。我在用水豚和妖怪。我想验证元素值,但标准方法失败: expect(find(:xpath, "//input[@type='text']").value).to eq('3') 或 元素如下所示(值显示在属性中): 但是在Capybara中没有数据方法。JS将影响value属性而不是value属性,这意味着您无法使用xpath查询它(您只能查询页面加载/解析时

我需要测试一个web页面,其中jQuery/AngularJS将一些数据添加到元素的属性中,在本例中为“value”,默认选择器不可见。我在用水豚和妖怪。我想验证元素值,但标准方法失败:

expect(find(:xpath, "//input[@type='text']").value).to eq('3')

元素如下所示(值显示在属性中):


但是在Capybara中没有数据方法。

JS将影响value属性而不是value属性,这意味着您无法使用xpath查询它(您只能查询页面加载/解析时存在的值属性)-如果它是唯一以“从不”作为占位符/id/name/label的输入,或者,您可以使用父元素对其进行范围限定,使其成为唯一匹配的输入,那么以下操作应该可以正常工作(如果需要范围限定,请使用找到的父元素替换页面)

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">
$('input[type="text"]').data('value', '3')
expect(page).to have_field('Never', with: '3')