如何修复 selenium-webdriver 错误 - $ 未定义?
Posted
技术标签:
【中文标题】如何修复 selenium-webdriver 错误 - $ 未定义?【英文标题】:How fix selenium-webriver error - $ is not defined? 【发布时间】:2015-04-24 14:25:13 【问题描述】:我正在尝试向按钮添加事件:
str = "a#fCoverage" // my locator
def str2 = "\$('" + str + "').addEventListener('click', function()alert('text'));" // add event
js.exec(str2)
但我收到此错误:
错误:org.openqa.selenium.WebDriverException:未知错误:$ 未定义
谁能帮帮我?
【问题讨论】:
使用“window.jQuery”而不是“$”... 你能举个例子吗? 【参考方案1】:addEventListener
是 document
上的一个方法,而不是 $
(它通常是 jQuery 的简写)。
所以将$
更改为document
。
【讨论】:
为什么字符串 "$(location.reload())" 在控制台中工作,但在我运行测试时不工作?测试代码:js.exec('$(location.reload())') browser.driver.executeScript('$(location.reload())')
虽然 - location.reload
是一个 javascript 命令,它与 jQuery 无关。你让它变得比它需要的复杂得多。 location.reload()
就是您所需要的。至于控制台,$
是否真的映射到了 jQuery?在控制台中执行$ === jQuery
=> 是否返回true
?
是的,$ === jQuery true
那么当您在测试中执行location.reload
时会发生什么? ....你为什么不做一个driver.navigate.refresh
(或者在你的语言中是等价的)?....
我只是想了解为什么如果我在控制台中编写 $('a#fCoverage').addEventListener('click', function()alert('text')); // 一切都很好,但如果我在测试中做同样的事情,我会在测试中出现错误($ 未定义),我使用 js.exec("my string") 或 browser.driver.executeScript("my string")跨度>
【参考方案2】:
使用document.querySelector
代替$
你的代码会结束
str = "a#fCoverage" // my locator
def str2 = "document.querySelector('" + str + "').addEventListener('click', function()alert('text'));" // add event
js.exec(str2)
【讨论】:
以上是关于如何修复 selenium-webdriver 错误 - $ 未定义?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 selenium-webdriver 中为 phantomjs 驱动程序设置一个用户代理?
当目标元素和目标元素在不同的帧中时,如何使用 selenium-webdriver 执行拖放?
轻松自动化---selenium-webdriver(python)