1. 程式人生 > >WebDriver進行多瀏覽器測試

WebDriver進行多瀏覽器測試

使用IE瀏覽器進行測試

(1)、需要從http://docs.seleniumhq.org/download/地址下載一個webDriver連線IE瀏覽器的驅動程式,檔名為IEDriverServer.exe.(注意:如果是64位系統,要分別開啟的是32位瀏覽器和64位瀏覽器,需要分別下載對應版本的IEDriverServer.exe

(2)、把下載的檔案儲存在本地徑盤的任意位置,在呼叫IE瀏覽器前,先將IE瀏覽器驅動程式的所在路徑設定為系統屬性值。我把驅動程式放在這個專案的lib包裡。

System.setProperty("webdriver.ie.driver", "src/lib/IEDriverServer.exe");

(3)、把driver例項化為InternetExplorerDriver物件。

(4)、開啟IE瀏覽器訪問百度首頁。

程式碼例項如下:

package cn.om;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterMethod;

public class IETest {
	WebDriver driver;
	String url;

	@Test
	public void IEDemo() {
		driver.get(url + "/");
	}

	@BeforeMethod
	public void beforeMethod() {
		System.setProperty("webdriver.ie.driver", "src/lib/IEDriverServer.exe");
		driver = new InternetExplorerDriver();
		url = "http://www.baidu.com";
	}

	@AfterMethod
	public void afterMethod() {
		driver.quit();
	}
}

注意:

        IE瀏覽器->設定->Internet選項->安全,將Internet、本地Intranet、受信任的站點、受限制的站點四項的啟用保護模式的勾選去掉,如下圖。否則會打不開IE瀏覽器:


使用Firefox瀏覽器進行測試

        firefox在介紹WebDriver的時候有介紹,這裡不詳細描述。
package cn.om;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;

public class FireFoxTest {
	
	WebDriver driver;
	String url;
  @Test
  public void firefoxDemo() {
	  driver.get(url);
      System.out.println("1 page's title is "+driver.getTitle());

      WebElement element=driver.findElement(By.id("kw"));

      element.sendKeys("zTree");

      element.submit();


      new WebDriverWait(driver,10).until(new ExpectedCondition<Boolean>() {
          public  Boolean apply(WebDriver d){
              return d.getTitle().toLowerCase().startsWith("ztree");
          }
      });


      System.out.println("2 page's title is "+driver.getTitle());
  }
  @BeforeMethod
  public void beforeMethod() {
      System.setProperty("webdriver.firefox.bin", "D:/Mozilla Firefox/firefox.exe");
      driver=new FirefoxDriver();
      url="http://www.baidu.com";
  }

  @AfterMethod
  public void afterMethod() {
	  driver.quit();
  }

}

使用Chrome瀏覽器進行測試

(1)、需要從http://docs.seleniumhq.org/download/地址下載一個webDriver連線Chrome瀏覽器的驅動程式,檔名為chromedriver.exe.

(2)、把下載的檔案儲存在本地徑盤的任意位置,在呼叫Chrome瀏覽器前,先將Chrome瀏覽器驅動程式的所在路徑設定為系統屬性值。我把驅動程式放在這個專案的lib包裡。

System.setProperty("webdriver.chrome.driver", "src/lib/chromedriver.exe");

(3)、把driver例項化為ChromeDriver物件。

(4)、開啟Chrome瀏覽器訪問百度首頁。

package cn.om;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterMethod;

public class IETest {
	WebDriver driver;
	String url;

	@Test
	public void IEDemo() {
		driver.get(url + "/");
	}

	@BeforeMethod
	public void beforeMethod() {
		System.setProperty("webdriver.chrome.driver", "src/lib/chromedriver.exe");
		driver = new ChromeDriver();
		url = "http://www.baidu.com";
	}

	@AfterMethod
	public void afterMethod() {
		driver.quit();
	}
}

使用TestNG進行併發相容性測試

        在web專案的測試過程中,經常會進行瀏覽器相容性相關性的測試工作,因為相容性測試的工作重複性相當高,所以可以將多個瀏覽器的相容性測試用例一次性執行。

        測試說明:

        分別使用IE、Chrome和Firefox瀏覽器,TestNG以併發方式在百度首頁中搜索某個關鍵詞。

package cn.om.elements;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.Assert;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass;

public class MultipleBrowserSearchTest {
	public WebDriver driver;
	String baseURL = "http://www.baidu.com";

	@Test
	public void testBaiduSearch()  {
		WebElement inputBox = driver.findElement(By.id("kw"));
		Assert.assertTrue(inputBox.isDisplayed());
		inputBox.sendKeys("selenium");
		driver.findElement(By.id("su")).click();
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Assert.assertTrue(driver.getPageSource().contains("selenium"));
	}

	@Parameters("browser")
	@BeforeClass
	public void beforeClass(String Browser) {
		if (Browser.equalsIgnoreCase("firefox")) {
			System.setProperty("webdriver.firefox.bin", "D:/Mozilla Firefox/firefox.exe");
			driver = new FirefoxDriver();
		} else if (Browser.equalsIgnoreCase("ie")) {
			System.setProperty("webdriver.ie.driver", "src/lib/IEDriverServer.exe");
			driver = new InternetExplorerDriver();
		} else {
			System.setProperty("webdriver.chrome.driver", "src/lib/chromedriver.exe");
			driver = new ChromeDriver();
		}
		driver.get(baseURL);
	}

	@AfterClass
	public void afterClass() {
		driver.close();
	}

}

當前工程的testng.xml檔案的配置內容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests" thread-count="3">
	<!-- 使用不同的執行緒來啟動test標籤定義的測試類。3為啟動時的執行緒數。 -->
	<test name="FiefoxTest">
		<parameter name="browser" value="firefox"></parameter>
		<classes>
			<class name="cn.om.elements.MultipleBrowserSearchTest"></class>
		</classes>
	</test>
	<test name="IETest">
		<parameter name="browser" value="ie"></parameter>
		<classes>
			<class name="cn.om.elements.MultipleBrowserSearchTest"></class>
		</classes>
	</test>
	<test name="ChromeTest">
		<parameter name="browser" value="chrome"></parameter>
		<classes>
			<class name="cn.om.elements.MultipleBrowserSearchTest"></class>
		</classes>
	</test>
</suite>

程式碼說明:

(1)、執行程式碼,可以看到系統同時彈出IE、Chrome、Firefox三個瀏覽器視窗,並在這三個視窗中執行測試指令碼中定義的操作步驟,實現了多個瀏覽器的併發測試。

(2)、程式碼中@Parameters("browser")這個註解定義了browser引數,在測試執行的過程中,這個引數的具體值由testng.xml中的<parameter name="browser" value="firefox">來傳遞。

(3)、parallel="tests" 表示使用不同的執行緒來啟動test標籤定義的測試類。thread-count=3為表示同時啟動執行測試指令碼的執行緒數。