如何模拟Capybara中提交按钮的两次快速点击?

时间:2017-05-25 23:26:45

标签: ruby-on-rails phantomjs capybara poltergeist

如果用户连续两次非常快速地点击表单的提交按钮,我的应用中就会出现错误。我可以在生产和开发环境中可靠地重现这一点。

我可以用Capybara / poltergeist / phantomjs重现这个吗?

find("#my-button").double_clickfind("#my-button").click.clickexecute_script("$('#register-button').click().click();")以及execute_script的其他变体不起作用。

我尝试的所有内容只会导致我的服务器端代码被调用一次,即使console.log日志记录显示click确实被调用了两次。所以我怀疑水豚的能力从根本上缺少了一些东西,并且吵闹的人会模仿这种行为。

有没有办法以某种方式在较低级别调用phantomJS并实现此目的?

我确实尝试了increasing我的网络服务器的并发性,它没有帮助。

  • capybara 2.14.0
  • rails 5.1.0
  • poltergeist 1.15.0
  • phantomjs 2.1.1

2 个答案:

答案 0 :(得分:1)

正如您所猜测的那样 - let answer = true; var postAxios = axios({ method: 'post', url: httpLink, params: {table: tableName}, data: rowInfo } ) .then(function (response) { console.log(response); alert(response); answer = true; }) .catch(function (error) { console.log(error); alert(error); answer = false; }); return answer; 与点击两次不同。只需点击两次即可

double_click

或者,根据您的错误,您可能需要在这两次点击之间稍微睡一会儿

find("#my-button").click.click

答案 1 :(得分:1)

这里采用略有不同的方法:这个bug的修复方法是什么?是否更容易测试修复,而不是测试这些操作是否无法执行?

例如,如果修复是在disable-with上使用Rails UJS <input type=submit>,那么您的测试可能类似于:

# replace `your_path` as required
visit your_path

# important: this stops the submission so the page doesn't change;
# but crucially doesn't stop UJS from doing its thing
execute_script("$('form').submit(function() { event.preventDefault() })")

# replace 'Submit form' and 'Processing...' text as appropriate
click_button('Submit form')
expect(page).to have_button('Processing...', disabled: true)