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為表示同時啟動執行測試指令碼的執行緒數。