zoukankan      html  css  js  c++  java
  • 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: estchromedriver.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: estChrome31chrome.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: estFirefox4firefox.exe"

     

     

    java -Dwebdriver.ie.driver="c: estIEDriverServer.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工具更完善,可以本地安装,开源软件

  • 相关阅读:
    【Android测试】Android截图的深水区
    【Android测试】UI自动化代码优化之路
    网页爬虫小试牛刀
    【Android测试】【第十九节】Espresso——API详解
    【iOS测试】【随笔】帧率FPS评测
    【iOS测试】【随笔】崩溃日志获取
    【后台测试】Linux下小试jmeter
    【后台测试】手把手教你jmeter压测
    【行业交流】2016 TiD质量竞争力大会——移动互联网测试到质量的转变之路
    【Android测试】【第十八节】Espresso——环境搭建
  • 原文地址:https://www.cnblogs.com/2018/p/3520797.html
Copyright © 2011-2022 走看看