设置了水豚值的比赛条件

时间:2018-11-13 03:23:18

标签: ruby selenium capybara

使用.set(#{value})填写注册表单中的文本字段时遇到问题,例如:我要输入的电话号码为506307,然后以063075结尾。 我已采取的变通办法是执行

之类的Javascript块
execute_script("document.querySelector('#{selector}').value = '#{value}'")

但是,使用相同的基于React.JS的Webmobile脚本,上面的脚本仅发送文本,但没有发送onChange事件,这导致无法选择/单击另一个元素->测试失败。

我想出了另一种方法,就是使用send_keys #{value}来触发按键事件,这会使浏览器认为该表单发生了按键事件,但是最终导致了竞争条件就像我提到的set(#{value})

另一个解决方法是使用What is the best way to trigger onchange event in react js,但是我倾向于在制作棘手的Javascript之前先使用Capybara原生操作。

那么,还有什么其他方法可以交互/填写表单字段,而不会导致种族状况问题?

预先感谢大家。

1 个答案:

答案 0 :(得分:0)

注意:任何建议仅使用execute_script来运行某些JS的“解决方案”都是一个糟糕的主意,因为它完全绕过了测试用户可以做什么的概念,并且基本上会使您的测试毫无价值。

此问题的根本原因是输入中附加的JS行为无法足够快地处理键事件。正确的解决方法是修复JS,但是如果无法解决,您可以尝试一些方法

首先,您可以尝试更改set使用的clear方法

element.set('506307', clear: :backspace)

element.set('506307', clear: :none) 

如果这没有任何改变,请尝试单击输入,然后在设置内容之前短暂睡眠

element.click
sleep 0.25
element.set('506307')

如果这些都不能解决问题,我们需要确切地知道您已将哪些JS行为附加到输入和/或JS行为正在侦听哪些事件。