使用WebDriver执行脚本在文本字段上触发事件

时间:2013-06-15 17:24:00

标签: javascript jquery selenium-webdriver

我有一个文本字段,一旦用户点击进入,就会将值附加到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完成此任务?

1 个答案:

答案 0 :(得分:3)

Selenium在clousure中执行每个javascript,并且在一次执行中定义的所有变量都不可用于下一次执行。 您应该首先构建脚本并在一次调用中执行它:

script = "var e = jQuery.Event('keyup'); e.which = 13; $('input').trigger(e)" driver.execute_script(script)