程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Selenium2入門(二)WebDriver,selenium2webdriver

Selenium2入門(二)WebDriver,selenium2webdriver

編輯:JAVA綜合教程

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 支持

  • 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);

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved