Capybara fill_in没有输入所有文字

时间:2017-07-12 03:38:15

标签: rspec capybara selenium-chromedriver

我使用chromedriver 2.30和capypbara 2.14.4在rspec 3.6.0下

fill_in "total-amount", with: "33"
expect(find_by_id("total-amount").value).to have_text("33")
click_on "create_btn"

有时我会收到错误

1) Create purchase with discount transaction creates a Sales Return Transaction
     Failure/Error: expect(find_by_id("total-amount").value).to have_text("33")
       expected to find text "33" in "3"
     # ./spec/integration/transactions/create_purchase_with_discount_spec.rb:67:in `block (2 levels) in <top (required)>'

就像fill_in一次输入一个字符一样。如何让fill_in一次性输入所有字符?

更新

我试过

expect(page).to have_field('total-amount', with: "33")

但得到了这个片状错误

expected to find field "total-amount" with value "33" but there were no matches. Also found "", which matched the selector but not all filters.

它找到了元素,但是即使fill_in行在它之前,还没有输入值。我使用的是材料设计,所有这些字段的计算都会影响这些元素的更新时间。

更新

将default_max_wait_time更改为20秒,仍然出现问题

更新

如果我在fill_in&#34;总金额&#34;周围睡觉,用:&#34; 33&#34;像这样;

sleep 1
fill_in "total-amount", with: "33"
sleep 1
expect(find_by_id("total-amount").value).to have_text("33")
click_on "create_btn"

这有效,但是睡觉是错误的!所以我仍然需要一种方法来检查我在材料设计框中输入的内容是否实际存在于那里并在继续之前设置为角度模型。

2 个答案:

答案 0 :(得分:2)

带有Selenium的Chromedriver不支持不集中的填充

任何输入的用户体验都有2个步骤:

  1. 单击或通过键盘选择一些输入
  2. 输入任何数据

要完成测试,请使用以下代码:

area = find("#total-amount").click # user usually click before input
area.send_keys "33"

答案 1 :(得分:0)

看起来你正在碰到{{3>}帖子中 Capybara(病人动物部分)中提到的竞争状况。

我找不到Capybara文档提供的等待的方法的规范列表,但根据该博客文章中提供的列表,#has_field? 应该等待并防止你看到的竞争状态。

page.has_field?('total-amount', :with => '33')