0

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

4

1 回答 1

3

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

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

于 2013-06-17T07:02:21.470 回答