前文Selenium2入門(一)說到Selenium是Web 應用程序測試框架,那麼如果對一個簡單的web應用需求:打開浏覽器,登錄百度首頁,輸入“歐洲杯”關鍵詞,點擊搜索按鈕 這一系列操作,能否用Selenium進行執行呢?可以,下面介紹的WebDriver就是可以完成這項任務的方法之一:
Webdriver (Selenium2)是一種用於Web應用程序的自動測試工具,它提供了一套友好的API,與Selenium 1(Selenium-RC)相比,Selenium 2的API更容易理解和使用,其可讀性和可維護性也大大提高。Webdriver完全就是一套類庫,不依賴於任何測試框架,除了必要的浏覽器驅動,不需要啟動其他進程或安裝其他程序,也不必像Selenium 1那樣需要先啟動服務。
另外,二者所采用的技術方案也不同。Selenium 1是在浏覽器中運行JavaScript來進行測試,而Selenium 2則是通過原生浏覽器支持或者浏覽器擴展直接控制浏覽器。
Selenium 2針對各個浏覽器而開發的,它取代了嵌入到被測Web應用中的 JavaScript。與浏覽器的緊密集成,支持創建更高級的測試,避免了JavaScript安全模型的限制。除了來自浏覽器廠商的支持,Selenium 2 還利用操作系統級的調用模擬用戶輸入。WebDriver 支持
Firefox (FirefoxDriver)
IE(InternetExplorerDriver)
Opera(OperaDriver)
Chrome (ChromeDriver)
以及safari(SafariDriver)
還支持Android(Selendroid)和iPhone(Appium)的移動應用測試。此外,Selenium 2還包括基於HtmlUnit的無界面實現,稱為HtmlUnitDriver(在後面文章中會介紹),和基於webkit的無界面浏覽器phantomjs。Selenium 2 API可以通過
Java
C#
PHP
Python
Perl
Ruby
等編程語言訪問,支持開發人員使用他們常用的編程語言來創建測試。
廢話不多說,使用WebDrive進行上述功能的測試,首先是開發環境的搭建:
一、開發環境:
1、JDK
2、MyEclipse
3、Selenium:selenium-java-2.53.1.zip,下載地址:http://code.google.com/p/selenium/downloads/list
解壓selenium-java包,這個包裡面包含四部分,如下圖:
二、創建Java Project:
1、把上面解壓出來的jar文件(包括libs和selenium-java-2.53.1.jar)拷到新建的project目錄下,目錄結構如下圖:
2、添加build path,項目目錄右鍵-->Build Path--> config build path-->Java Build Path-->Libraries-->Add JARs
把libs文件夾下的jar包全部添加上,再添加selenium-java-2.39.0和selenium-java-2.39.0-srcs
3、添加完之後目錄結構如下圖,多了Referenced Libraries,這裡就是上面那一步添加進去的jar包:
4、關聯selenium源碼:
至此,環境工作准備就緒。
三、編寫測試類
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class SeleniumTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //如果火狐浏覽器沒有默認安裝在C盤,需要制定其路徑 //System.setProperty("webdriver.firefox.bin", "D:/Program Files/Mozilla firefox/firefox.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://www.baidu.com/"); driver.manage().window().maximize(); WebElement txtbox = driver.findElement(By.name("wd")); txtbox.sendKeys("歐洲杯"); WebElement btn = driver.findElement(By.id("su")); btn.click(); //為便於查看測試效果,可把關閉浏覽器操作注釋 //driver.close(); } }
通過這種方式,可以查看到程序會自動打開FF,自動輸入歐洲杯然後出現查詢結果。
觀察程序執行過程,會發現無論是打開浏覽器,還是當我們模擬填入關鍵詞,並進行點擊搜索時,頁面加載是需要一定時間的,而webdriver只能找到頁面已有的元素,所以有些時候需要加入一個等待的時間,讓頁面元素完全加載出來,才能通過findelement方法找到你想要的元素。因此,最好能夠在click語句後,加入一條等待語句,程序編程如下所示:
1 import org.openqa.selenium.By; 2 import org.openqa.selenium.WebDriver; 3 import org.openqa.selenium.WebElement; 4 import org.openqa.selenium.firefox.FirefoxDriver; 5 6 7 public class SeleniumWebDriverSimpleDemo { 8 9 /** 10 * @param args 11 */ 12 public static void main(String[] args) { 13 // TODO Auto-generated method stub 14 //如果火狐浏覽器沒有默認安裝在C盤,需要制定其路徑 15 //System.setProperty("webdriver.firefox.bin", "D:/Program Files/Mozilla firefox/firefox.exe"); 16 WebDriver driver = new FirefoxDriver(); 17 driver.get("http://www.baidu.com/"); 18 19 driver.manage().window().maximize(); 20 21 WebElement txtbox = driver.findElement(By.name("wd")); 22 txtbox.sendKeys("歐洲杯"); 23 24 WebElement btn = driver.findElement(By.id("su")); 25 btn.click(); 26 try { 27 28 Thread.sleep(3000); 29 30 } catch (InterruptedException e) { 31 32 // TODO Auto-generated catch block 33 34 e.printStackTrace(); 35 36 } 37 38 39 //為便於查看測試效果,可把關閉浏覽器操作注釋 40 //driver.close(); 41 42 } 43 44 }
這個sleep()並不是WebDriver中自帶的方法,而是java中休眠線程的一個方法,這裡不是很推薦。WebDriver自帶了一個智能等待的方法。
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);