是否可以用Capybara填充数字字段/标签?

时间:2017-02-25 14:57:21

标签: ruby-on-rails rspec capybara capybara-webkit

我有一个数字字段,在:product_quantity之后带有一个按钮"Add to Cart"。我的测试工作没有调整number_field,但是当我取消注释这一行时:

product_from_shop.fill_in 'quantity', with: 5

东西爆炸了。 Capybara::ElementNotFound

我认为这是关于这一行:

<%= f.number_field :product_quantity, value: booking.product_quantity, min: 1, max: 999, title: 'quantity' %>

我尝试了几种方法,也搜索了类或id。不工作。没有标签会使我的观点变得混乱。

title在其他情况下工作正常,没有表格。

另外:我使用的是capybara webkit,因为它使用JS。

2 个答案:

答案 0 :(得分:2)

fill_in使用:fillable_field选择器,它将查找除提交,图像,广播,复选框或文件类型之外的任何可见输入或textarea区域元素。它将找到那些元素id,name或placeholder属性,或者通过关联标签元素中的文本。由于您没有关联的标签,因此您需要使用id,name或placeholder属性。假设product_from_shop是页面上的包装元素,您用它来限定此fill_in,然后

product_from_shop.fill_in '<something>_product_quantity', with: 5

应该通过id查找和填充元素 - 取决于表单所用的模型类型(只需查看实际的HTML以查看分配的ID)。

如果产品数量字段是product_from_shop中唯一可填写的字段,您也可以

product_from_shop.fill_in with: 5 # same as product_from_shop.fill_in nil, with: 5

如果这些都不适合您,您可以转而使用

之类的东西
product_from_shop.find(<more complicated query>).set '5'

澄清您对title之前工作的评论 - title属性仅在找到链接和按钮时匹配。

答案 1 :(得分:0)

假设你在Rails中使用form_for,那么它应该生成一个你可以使用的id。我不熟悉product_from_shop.fill_in表单,我通常使用page,但请尝试其中一种:

page.fill_in :product_from_shop_product_quantity, with: 5

page.fill_in "product_from_shop_product_quantity", with: 5