如何使用 jQuery 在 Selenium WebDriver 中单击带有 Java 的按钮

Posted

技术标签:

【中文标题】如何使用 jQuery 在 Selenium WebDriver 中单击带有 Java 的按钮【英文标题】:How to click a button in Selenium WebDriver with Java using jQuery 【发布时间】:2012-08-23 06:35:59 【问题描述】:

我有以下 html

<button class="gbqfba" name="btnK" aria-label="Google Search" id="gbqfba"><span id="gbqfsa">Google Search</span></button>

我在 WebDriver 中使用 java 时点击“Google 搜索”按钮的以下代码运行良好:

driver.findElement(By.id("gbqfb")).click();

我想使用带有 WebDriver 的 jQuery 来单击按钮。我该怎么做?

我做了以下(使用TestNG框架在eclipse中运行测试):

WebDriver driver = new FirefoxDriver();
javascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("$('#gbqfba').click();");

不幸的是,显示以下错误:

org.openqa.selenium.WebDriverException: $ 未定义(警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:23 毫秒

我上面的代码有什么问题?

【问题讨论】:

【参考方案1】:

WebDriver 显然没有使用 jQuery 扩展,因此 '$' 不在名称空间中。您可以将缩小的 jQuery.js 加载到字符串中,然后将其作为测试的一部分进行评估 - 这会将“$”添加到页面的命名空间...

【讨论】:

如何在WebDriver中使用外部js文件?可以举个.js文件配置的例子吗? 您要做的是将 jQuery.js 文件转换为字符串。有很多方法可以做到html5rocks.com/en/tutorials/file/dndfiles 一旦你有了它,你可以这样做 jse.executeScript("eval(jqueryscript);$('#gbqfq').click();");我不得不承认这是一个 hack,如果你必须做很多这些事情会很慢,因为 eval 很慢 anq 即使缩小 jQuery 也很大 感谢您的回答。我已经理解了这个例子,但我仍然对 eval 中的 jqueryscript 参数模糊不清。 jqueryscript 会写什么? 由于“google.com”不使用 jQuery,我的帖子中提到的代码失败了。可以通过将 jQuery 代码的内容从 JavaScript 文件(jquery.js、jquery.min.js 或类似文件)加载到字符串中来解决【参考方案2】:

以下代码运行良好:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
URL jqueryUrl = Resources.getResource("jquery-1.8.2.min.js");
String jqueryText = Resources.toString(jqueryUrl, Charsets.UTF_8);
jse.executeScript(jqueryText);
jse.executeScript("$('#gbqfba').click();");

【讨论】:

这真的不是一个好主意。您正在向您正在测试的网站中注入相当多的代码,这些代码可能无法很好地与已经存在的代码一起使用。有很多与 jQuery 冲突的 JS 库,如果您有不同的版本,jQuery 甚至会与自身发生冲突。如果 jQuery 在您正在测试的网站中不可用不要使用它!为了明确这样做您可能会使您的测试无效。 @Ardesco:感谢您的建议。最好的方法是什么?使用JS?在 Selenium 自动化测试中使用 JQuery 是否不明智? 如果库已经可用,使用 jQuery 就可以了,将一堆新库(无论是否为 jQuery)注入到您尝试测试的网站中可能会产生深远的影响。问题是你为什么要注入 JavaScript 来触发点击事件,这就是为什么你在 Selenium 中有一个 WebElement.click() 函数。 是的,我同意你的看法。我只是用于在 WebDriver 中学习 JS 或 jQuery。有 click() 方法可以很好地使用。【参考方案3】:

这也可以使用类列表来解决

列表 w = driver.findElements( By.cssSelector("button.gbqfba"));

    for(WebElement s1: w)
    
        String s2= s1.getText();
        System.out.println(s2);

        if(s2.contentEquals("Google Search"))
        
            s1.click();   
            break;
        
    

【讨论】:

以上是关于如何使用 jQuery 在 Selenium WebDriver 中单击带有 Java 的按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 在 Selenium WebDriver 中单击带有 Java 的按钮

Selenium:如何使用Javascript将密钥发送到JQuery输入

初始化 selenium webdriver 时如何修复 python-selenium 错误“连接被拒绝”?

使用 c#、selenium 和 jquery 实现 IE 自动化 - 从动态表中随机获取

selenium

尝试使用 selenium/jquery 从表中选择随机行