如何修复 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】:

addEventListenerdocument 上的一个方法,而不是 $(它通常是 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 执行拖放?

轻松自动化---selenium-webdriver(python)

Selenium-WebDriver自学Selenium-IDE验证点

轻松自动化---selenium-webdriver(python)