Selenium2入門(二)WebDriver,selenium2webdriver
前文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 支援
還支援Android(Selendroid)和iPhone(Appium)的行動裝置 App測試。此外,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//如果Firefox瀏覽器沒有預設安裝在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 args11 */12 public static void main(String[] args) {13 // TODO Auto-generated method stub14 //如果Firefox瀏覽器沒有預設安裝在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 block33 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 一般用秒作為單位。