我有一个文本字段,一旦用户点击进入,就会将值附加到dom。我在使用WebDriver模拟这个时遇到了一些麻烦,因为driver.send_keys(:return)只会提交表单。
在查看文本字段的实现方式后,我注意到它正在寻找一个' keyup'事件,正在使用它来输入。
使用浏览器控制台,我可以通过以下方式使用jQuery触发对keyup事件的提交来成功地模拟这个:
var e = jQuery.Event('keyup')
e.which = 13;
$('input').trigger(e)
不幸的是,我无法使用driver.execute_script完成同样的事情。有什么想法为什么不能做到这一点?
driver.find_element(:id => 'input').send_keys('foo')
driver.execute_script("var e = jQuery.Event('keyup')")
driver.execute_script("e.which = 13;")
driver.execute_script("$('input').trigger(e)")
如何使用Selenium WebDriver完成此任务?
答案 0 :(得分:3)
Selenium在clousure中执行每个javascript,并且在一次执行中定义的所有变量都不可用于下一次执行。 您应该首先构建脚本并在一次调用中执行它:
script = "var e = jQuery.Event('keyup'); e.which = 13; $('input').trigger(e)"
driver.execute_script(script)