Web自動化測試 Selenium 1/3


Selenium 名字的來源

在這里,我還想說一下關於 Selenium 名字的來源,很有意思的 : > : Selenium 的中文名為 “ 硒 ” ,是一種化學元素的名字,它 對 汞 ( Mercury )有天然的解毒作用,實驗表明汞暴露水平越高,硒對汞毒性的拮抗作用越明顯,所以說硒是汞的克星。大家應該知道 Mercury 測試工具系 列吧( QTP , QC , LR , WR... ),他們功能強大,但卻價格不菲,大家對此又愛又恨!故 thoughtworks 特意把他們的 Web 開源測試工具命 名為 Selenium ,以此幫助大家脫離汞毒。

產品類別

Selenium IDE

一個用於構造測試腳本的原型工具。它是一個Firefox插件,並且提供了一個易於使用的開發自動化測試的接口。Selenium IDE有一個錄制功能,可以記錄用戶執行的動作,然后可以導出它們作可重用的腳本

Remote Control

Selenium RC是最重要的Seleniumx項目,在WebDriver/Selenium合並產生Selenium 2

WebDriver

Selenium 2是該項目的未來方向,和對Selenium工具包的最新的增加物。

Grid

如果你必須運行你的測試集在多個環境,你可以有不同的遠程機器的支持和運行你的測試在同一時間在不同的遠程機器上。在任何一種情形下,Selenium都將充分利用並行處理,極大地改善運行你的測試所花費的時間。

 

瀏覽器支持

官方文檔 http://docs.seleniumhq.org/docs/01_introducing_selenium.jsp#supported-browsers-and-platforms

 

實戰操作

准備

IE ChromeDriver安裝和准備

https://code.google.com/p/selenium/wiki/ChromeDriver

https://code.google.com/p/selenium/wiki/InternetExplorerDriver

 

RemoteControl的不同瀏覽器Java代碼

package base;

 

import org.openqa.selenium.*;

import org.openqa.selenium.ie.*;

import org.openqa.selenium.remote.*;

import static org.testng.Assert.*;

import org.testng.annotations.*;

import com.thoughtworks.selenium.Selenium;

import java.io.*;

import java.net.*;

 

public class BaseRC {

protected Selenium selenium;

private WebDriver driver = null;

private StringBuffer verificationErrors = new StringBuffer();

 

@Parameters({ "platform", "browser", "version", "url" })

@BeforeTest(alwaysRun = true)

public void setup(String platform, String browser, String version,

String url) throws MalformedURLException, IOException {

DesiredCapabilities caps = null;

 

// Browsers

if (browser.equalsIgnoreCase("Internet Explorer")) {

System.setProperty("webdriver.ie.driver",

"c:\\test\\IEDriverServer.exe");

caps = DesiredCapabilities.internetExplorer();

// IE安全設置

caps.setCapability( InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,

true);

// browser zoom level must be set to 100%

} else if (browser.equalsIgnoreCase("Firefox")) {

System.setProperty("webdriver.firefox.bin",

"C:\\test\\Firefox4\\firefox.exe");

caps = DesiredCapabilities.firefox();

} else if (browser.equalsIgnoreCase("chrome")) {

System.setProperty("webdriver.chrome.driver",

"c:\\test\\chromedriver.exe");

caps = DesiredCapabilities.chrome();

caps.setCapability(

"chrome.binary",

"C:\\test\\Chrome31\\chrome.exe");

} else if (browser.equalsIgnoreCase("iPad"))

caps = DesiredCapabilities.ipad();

else if (browser.equalsIgnoreCase("Android"))

caps = DesiredCapabilities.android();

 

// Platforms

if (platform.equalsIgnoreCase("Windows"))

caps.setPlatform(org.openqa.selenium.Platform.WINDOWS);

else if (platform.equalsIgnoreCase("MAC"))

caps.setPlatform(org.openqa.selenium.Platform.MAC);

else if (platform.equalsIgnoreCase("Andorid"))

caps.setPlatform(org.openqa.selenium.Platform.ANDROID);

 

// Version

caps.setVersion(version);

driver = new RemoteWebDriver(new URL(

"http://localhost:4444/wd/hub"), caps);

 

selenium = new WebDriverBackedSelenium(driver, url);

}

 

@AfterTest

public void afterTest() {

// Close the browser

driver.quit();

selenium.stop();

 

String verificationErrorString = verificationErrors.toString();

if (!"".equals(verificationErrorString)) {

fail(verificationErrorString);

}

}

 

}

WebDriver的不同瀏覽器Java代碼

package base;

 

import org.openqa.selenium.*;

import org.openqa.selenium.firefox.*;

import org.openqa.selenium.ie.*;

import org.openqa.selenium.chrome.*;

import org.openqa.selenium.remote.*;

import org.openqa.selenium.support.ui.ExpectedCondition;

import org.openqa.selenium.support.ui.WebDriverWait;

import static org.testng.Assert.*;

import org.testng.annotations.*;

import java.io.*;

import java.net.*;

 

public class BaseWebDriver {

protected WebDriver driver = null;

private StringBuffer verificationErrors = new StringBuffer();

 

@Parameters({ "platform", "browser", "version", "url" })

@BeforeTest(alwaysRun = true)

public void setup(String platform, String browser, String version,

String url) throws MalformedURLException, IOException {

DesiredCapabilities caps = null;

 

// Browsers

if (browser.equalsIgnoreCase("Internet Explorer")) {

System.setProperty("webdriver.ie.driver",

"c:\\test\\IEDriverServer.exe");

caps = DesiredCapabilities.internetExplorer();

// IE安全設置

caps.setCapability(

InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,

true);

// browser zoom level must be set to 100%

} else if (browser.equalsIgnoreCase("Firefox")) {

System.setProperty("webdriver.firefox.bin",

"C:\\test\\Firefox4\\firefox.exe");

caps = DesiredCapabilities.firefox();

} else if (browser.equalsIgnoreCase("chrome")) {

System.setProperty("webdriver.chrome.driver",

"c:\\test\\chromedriver.exe");

caps = DesiredCapabilities.chrome();

caps.setCapability(

"chrome.binary",

"C:\\test\\Chrome31\\chrome.exe");

 

} else if (browser.equalsIgnoreCase("iPad"))

caps = DesiredCapabilities.ipad();

else if (browser.equalsIgnoreCase("Android"))

caps = DesiredCapabilities.android();

 

 

// Platforms

if (platform.equalsIgnoreCase("Windows"))

caps.setPlatform(org.openqa.selenium.Platform.WINDOWS);

else if (platform.equalsIgnoreCase("MAC"))

caps.setPlatform(org.openqa.selenium.Platform.MAC);

else if (platform.equalsIgnoreCase("Andorid"))

caps.setPlatform(org.openqa.selenium.Platform.ANDROID);

 

// Version

caps.setVersion(version);

 

driver = new RemoteWebDriver(new URL(

 

"http://localhost:4444/wd/hub"), caps);

 

driver.get(url);

//

WebDriverWait wait = new WebDriverWait(driver, 10);

 

wait.until(new ExpectedCondition<WebElement>() {

 

@Override

 

public WebElement apply(WebDriver d) {

 

return d.findElement(By.id("login"));

 

}

 

});

 

}

 

 

/* @Test(description = "TestDemo")

public void testDemo() throws InterruptedException {

// Sleep until the div we want is visible or 5 seconds is over

long end = System.currentTimeMillis() + 5000;

while (System.currentTimeMillis() < end) {

WebElement resultsDiv = driver.findElement(By.id("container"));

// If results have been returned, the results are displayed in a

// drop down.

if (resultsDiv.isDisplayed()) {

break;

}

}

}*/

 

 

@AfterTest

public void afterTest() {

// Close the browser

driver.quit();

//driver.close();

 

String verificationErrorString = verificationErrors.toString();

if (!"".equals(verificationErrorString)) {

fail(verificationErrorString);

}

}

 

}

Grid下的不同瀏覽器運行腳本

總控運行

rem  http://localhost:4444/grid/console 可以查看hub總控的信息

 

java -jar selenium-server-standalone-2.35.0.jar -role hub -port 4444 -nodeTimeout 600

 

各種瀏覽器運行的腳本

參數設置相同的部分[IP RC/WD運行模式]

@echo off

set a=0

for %%a in (%*) do set /a a+=1

echo "%a% argc"

 

Rem 可變的設置

set PORT=8902 

if %a%==1 (

if "%1%"=="" (

 set IP="localhost"

) else (

 set IP=%1%

)

set MODE="webdriver"

) else (

if "%1%"=="" (

 set IP="localhost"

) else (

 set IP=%1%

)

 

 

if "%2%"=="rc" (

 set MODE="node"

 set PORT=9902

) else (

 set MODE="webdriver"

)

)

 

echo %IP% %MODE%

 

不同瀏覽器的運行參數

java -Dwebdriver.chrome.driver="c:\test\chromedriver.exe" -jar selenium-server-standalone-2.35.0.jar -role %MODE% -hubHost %IP% -port %PORT% -timeout 20000 -browser "browserName=chrome,version=31,maxInstances=2,platform=WINDOWS,chrome.binary=C:\test\Chrome31\chrome.exe"

 

rem java -jar selenium-server-standalone-2.35.0.jar -h 可以查看幫助參數

rem !!! -browser參數中,逗號之間不要有空格

java -jar selenium-server-standalone-2.35.0.jar -role %MODE% -hubHost %IP% -port %PORT% -timeout 20000 -browser "browserName=firefox,version=4,maxInstances=1,platform=WINDOWS,firefox_binary=C:\test\Firefox4\firefox.exe"

 

 

java -Dwebdriver.ie.driver="c:\test\IEDriverServer.exe" -jar selenium-server-standalone-2.35.0.jar -role %MODE% -hubHost %IP% -port %PORT% -timeout 20000 -browser "browserName=internet explorer,version=8,maxInstances=1,platform=WINDOWS"

 

參考

v 零成本實現Web自動化測試-基於SeleniumBromine 4407693.2230619944

v Selenium測試實踐-基於電子商務平台 關春銀等 

v Selenium Testing Tools Cookbook

Over 90 recipes to build, maintain, and improve test automation with Selenium WebDriver Unmesh Gundecha

 

v webdriver文檔

v Selenium私房菜(新手入門教程)

 

http://seleniumhq.org/

http://www.compendiumdev.co.uk/selenium 

http://tech.it168.com/a2013/0906/1530/000001530755_all.shtml

https://code.google.com/p/selenium/downloads/list

 

 

v Selenium IDE + YSlow +Showslow 實現頁面性能評估自動化,如果需要評估頁面的性能,http://www.webpagetest.org/ 參考這個webpagetest工具更完善,可以本地安裝,開源軟件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM