2012-08-23 73 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; 
     } 
    } 
相關問題