程式扎記: [ Java 套件 ] selenium - Getting started with WebDriver

標籤

2013年9月17日 星期二

[ Java 套件 ] selenium - Getting started with WebDriver

來源自 這裡
Preface:
最近的研究需要針對 Web browsing 的行為進行自動化, 就 Google 到了 Selenium 這個套件. 而這篇文章要針對這個套件在 Java 上的支援做個使用入門介紹. 首先我們要來看看 WebDriver 介面上提供的方法與簡單使用範例. 當然在開始 coding 前要先去下載該套件的 package. 下載 selenium-java-[version].jar

Example1:
第一個範例要示範透過 HtmlUnitDriver 來模擬在 Google 搜尋 "Cheese". 剛剛提到的 WebDriver 是個介面, 而 HtmlUnitDriver 則是我們選擇它的實作類別. 在下面代碼中我們首先利用介面上的 get() 方法來載入 Google 的頁面, 接著取得 HTML 元件中 name="q" 的元件並以 WebElement 表示. 事實上當你打開 Google 頁面並檢視原始碼時會發現:


它就是提交搜尋 form 表單的 input 元件. 所以接著透過上面的方法 sendKeys() 將搜尋的字串輸入後便提交標單. 完整代碼如下:
  1. package test.selenium;  
  2.   
  3. import java.io.File;  
  4.   
  5. import org.apache.commons.io.FileUtils;  
  6. import org.openqa.selenium.By;  
  7. import org.openqa.selenium.OutputType;  
  8. import org.openqa.selenium.TakesScreenshot;  
  9. import org.openqa.selenium.WebDriver;  
  10. import org.openqa.selenium.WebElement;  
  11. import org.openqa.selenium.firefox.FirefoxBinary;  
  12. import org.openqa.selenium.firefox.FirefoxDriver;  
  13. import org.openqa.selenium.htmlunit.HtmlUnitDriver;  
  14.   
  15. public class Example {  
  16.     /** 
  17.      * BD: Refer to https://code.google.com/p/selenium/wiki/GettingStarted 
  18.      * @param args 
  19.      */  
  20.     public static void main(String args[]) throws Exception  
  21.     {  
  22.           
  23.         // Create a new instance of the html unit driver  
  24.         // Notice that the remainder of the code relies on the interface,   
  25.         // not the implementation.  
  26.         WebDriver driver = new HtmlUnitDriver();   
  27.   
  28.         // And now use this to visit Google  
  29.         driver.get("http://www.google.com");  
  30.   
  31.         // Find the text input element by its name  
  32.         WebElement element = driver.findElement(By.name("q"));  
  33.   
  34.         // Enter something to search for  
  35.         element.sendKeys("Cheese!");  
  36.   
  37.         // Now submit the form. WebDriver will find the form for us from the element  
  38.         element.submit();  
  39.   
  40.         // Check the title of the page  
  41.         Thread.sleep(5000);  
  42.         System.out.println("Page title is: " + driver.getTitle());        
  43.     }  
  44. }  
Example2:
下一個範例是要示範如何模擬瀏覽器行為並取的 Google Suggestion (當你在 Google 搜尋輸入部分字串, Google 會提示最常搜尋的完整字串清單). 完整代碼如下, 比較不一樣的是這次 WebDriver 選擇的實作類別是 FirefoxDriver. 而使用這個類別前你先要安裝 Firefox 瀏覽器, 當你執行 get() 方法時你會發現 Firefox 瀏覽器被叫起來並輸入你要瀏覽的 URL. 最後並呼叫方法 close() 來關閉瀏覽器:
  1. package test.selenium;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.openqa.selenium.By;  
  6. import org.openqa.selenium.WebDriver;  
  7. import org.openqa.selenium.WebElement;  
  8. import org.openqa.selenium.firefox.FirefoxDriver;  
  9.   
  10. public class GoogleSuggest {  
  11.     public static void main(String[] args) throws Exception{  
  12.         // The Firefox driver supports javascript   
  13.         WebDriver driver = new FirefoxDriver();  
  14.           
  15.         // Go to the Google Suggest home page  
  16.         driver.get("http://www.google.com/webhp?complete=1&hl=en");  
  17.           
  18.         // Enter the query string "Cheese"  
  19.         WebElement query = driver.findElement(By.name("q"));  
  20.         query.sendKeys("Cheese");  
  21.   
  22.         // Sleep until the div we want is visible or 5 seconds is over  
  23.         long end = System.currentTimeMillis() + 5000;  
  24.         while (System.currentTimeMillis() < end) {  
  25.             WebElement resultsDiv = driver.findElement(By.className("gssb_e"));  
  26.   
  27.             // If results have been returned, the results are displayed in a drop down.  
  28.             if (resultsDiv.isDisplayed()) {  
  29.               break;  
  30.             }  
  31.         }  
  32.   
  33.         // And now list the suggestions  
  34.         List allSuggestions = driver.findElements(By.xpath("//td[@class='gssb_a gbqfsf']"));  
  35.           
  36.         for (WebElement suggestion : allSuggestions) {  
  37.             System.out.println(suggestion.getText());  
  38.         }  
  39.         System.out.printf("\t[Info] Sleep 5 sec and close the browser...\n");  
  40.         Thread.sleep(5000);  
  41.         driver.close();  
  42.     }  
  43. }  
Supplement:
Next Steps For Using WebDriver
Once you've completed the GettingStarted tutorial, you may want to know more. This is the right place to look!


沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!