如何同時測試多種不同的瀏覽器 (Java/TestNG為例子)
這篇文章主要說明當一個寫好的自動化測試程式,所指定的瀏覽器型態(IE、Chrome, FireFox..),
如何透過外部參數的方式,將自動化測試程式啟動執行。當然,自動化測試程式完全不需要修改。
這樣的情境特別適用在瀏覽器的相容性測試。
最後,我們會用Java/TestNG為例子,說明如何實作這樣的測試程式。
測試情境
這個測試我們將
1. 瀏覽Google 網站
2. 輸入 “Selenium” 搜尋
3.印出目前視窗的Title
同樣的測試個案,執行在FireFox 與Chrome
程式說明 – browser參數值的傳遞
這個程式我們主要透過 TestNG.XML 的參數設定來達到啟動多種瀏覽器。
TestNG.Xml 中我們設定
<parameter name=”browser” value=”Firefox”/>
因此在Java 程式中,透過下列方式,取得參數值browser
@Parameters({ “browser” })
public void openBrowser(String browser) {
…..
我們根據這個值browser啟動相對應的browser
程式說明 – 測試個案的相依性
這個程式我們定義兩個測試個案,一個是瀏覽google。另外一個是搜尋Selenium之後,印出視窗Title。
這兩個測試個案因為有先後順序,所以利用dependsOnMethods
因此visit_google_getTitle 會先執行,接著再執行search_TestCase
@Test
public void visit_google_getTitle()
@Test (dependsOnMethods = { “visit_google_getTitle” })
public void search_TestCase()
Java/TestNG 程式範例
TestNG.XML
[pastacode lang=”markup” message=”” highlight=”” provider=”manual”]
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Parallel test suite" parallel="tests" thread-count="2">
<test name="Firefox Test">
<parameter name="browser" value="Firefox"/>
<classes>
<class name="myJava.MultipleBrowserTest"/>
</classes>
</test>
<test name="Chrome Test">
<parameter name="browser" value="Chrome"/>
<classes>
<class name="myJava.MultipleBrowserTest"/>
</classes>
</test>
</suite>
[/pastacode]
MultipleBrowserTest.Java
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
package myJava;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
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.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class MultipleBrowserTest {
private WebDriver driver;
String baseURL = "http://www.google.com/";
@Parameters({ "browser" })
@BeforeTest
public void openBrowser(String browser) {
try {
if (browser.equalsIgnoreCase("Firefox")) {
driver = new FirefoxDriver();
} else if (browser.equalsIgnoreCase("Chrome")) {
System.setProperty("webdriver.chrome.driver",
"D:\\ETP Web Automation by Selenium Python\\ClassDemo\\chromedriver.exe");
driver = new ChromeDriver();
} else if (browser.equalsIgnoreCase("IE")) {
System.setProperty("webdriver.ie.driver",
"D:/Dev/Jars/IEDriverServer.exe");
driver = new InternetExplorerDriver();
}
} catch (WebDriverException e) {
System.out.println(e.getMessage());
}
}
@Test
public void visit_google_getTitle() {
driver.navigate().to(baseURL);
System.out.println("The Existing Window title: " + driver.getTitle());
}
@Test (dependsOnMethods = { "visit_google_getTitle" })
public void search_TestCase() throws InterruptedException {
driver.findElement(By.name("q")).sendKeys("Selenium");
driver.findElement(By.name("q")).submit();
Thread.sleep(2000);
System.out.println("The Window title of the Search: " + driver.getTitle());
}
@AfterTest
public void closeBrowser() {
driver.quit();
}
}
[/pastacode]