前文Selenium2入門(一)說到Selenium是Web 應用程式測試框架,那麼如果對一個簡單的web應用需求:打開瀏覽器,登錄百度首頁,輸入“歐洲杯”關鍵詞,點擊搜索按鈕 這一系列操作,能否用Selenium進行執行呢?可以,下麵介紹的WebDriver就是可以完成這項任務的方法之一: Web ...
前文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);
Arg0:等待的時間長度,int 類型 ;
Arg1:等待時間的單位 TimeUnit.SECONDS 一般用秒作為單位。