2012-08-23 74 views
2

我有以下HTML:如何单击一个按钮在硒的webdriver与Java使用jQuery

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

我,请点击“谷歌搜索”按钮下面的代码工作良好的webdriver的用java:

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

我想用jQuery和WebDriver来点击按钮。我该怎么做?

我做了以下(测试是在Eclipse中使用TestNG的框架上运行):

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

不幸被显示以下错误:

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

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

回答

1

WebDriver显然不使用jQuery扩展,所以'$'不在名称空间中。您可以在精缩的jquery.js加载到一个字符串,然后EVAL它作为测试的一部分 - 这将添加“$”页面的命名空间......

+0

如何在WebDriver中使用外部js文件?你能举一个配置.js文件的例子吗? –

+0

你想要做的是将jQuery.js文件转换为字符串。有许多方法可以做到http://www.html5rocks.com/en/tutorials/file/dndfiles/,你可以这样做jse.executeScript(“eval(jqueryscript); $('#gbqfq')。click ();“);我不得不承认,这是一个破解,如果你必须做很多这样做会很慢,因为eval是缓慢的,甚至缩小了jQuery很大 – oshea00

+0

感谢您的回答。我已经理解了这个例子,但我仍然对eval中的jqueryscript参数含糊不清。什么会写在jqueryscript? –

1

下面的代码工作得很好:

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();"); 
+0

这真的不是一个好主意。您正在向您正在测试的网站注入相当多的代码,可能无法很好地与已经存在的代码打好关系。如果你有不同的版本,有很多与jQuery和jQuery冲突的JS库甚至会与自身发生冲突。如果jQuery在您正在测试的网站上不可用**请勿使用它** **要做到这一点**可能会使您的测试无效** – Ardesco

+0

@Ardesco:感谢您的建议。最好的方法是什么?使用JS?在Selenium自动化测试中使用JQuery不明智吗? –

+0

如果库已经可用,那么使用jQuery是没有问题的,在你试图测试的网站中注入一堆新的库(jQuery或没有)会产生深远的影响。问题是你为什么要注入JavaScript来触发一个点击事件,这就是为什么你在Selenium中有一个WebElement.click()函数的原因。 – Ardesco

0

这也可以通过类列表来解决。

List 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; 
     } 
    } 
相关问题