• 利用selenium Server实现IE firefox 和 chrome兼容性测试


      本文的主题是基于Selenium Server,使用 Java 语言编写网页交互流程,

    实现多浏览器(IE Firefox Chrome)兼容性测试,为使用纪要。

      Selenium

      Selenium是一套浏览器自动化测试工具(http://www.seleniumhq.org/),

    其中Selenium IDE为火狐的一个插件,此插件可以实现火狐浏览器上用户操作的录制和回放功能, 

    但是录制结果不能再其他浏览器上验证。

      幸好其可以导出 JUnit框架等的测试代码,让其可以再其他浏览器上执行。 

      JUnit

      是一个单元测试框架,官网见下:

        https://github.com/junit-team/junit

      博客园上有使用介绍博文:

      http://www.cnblogs.com/mengdd/archive/2013/03/26/2983565.html

     准备:

      1、下载eclipse, 其自带junit。 下载地址 www.Eclipse.org

      2、下载Selenium Server 和 Java Client Driver, 下载地址 http://docs.seleniumhq.org/download/

      http://selenium-release.storage.googleapis.com/2.41/selenium-server-standalone-2.41.0.jar

      http://selenium-release.storage.googleapis.com/2.41/selenium-java-2.41.0.zip

      3、下载IE Driver, 

      http://selenium-release.storage.googleapis.com/2.41/IEDriverServer_Win32_2.41.0.zip

      4、下载Chrome Driver,

      http://chromedriver.storage.googleapis.com/index.html

      http://chromedriver.storage.googleapis.com/2.10/chromedriver_win32.zip

     安装配置:

      1、启动eclipse,

        创建SeleniumTest工程,

        创建包 com.selenium.test.junitcode,

        创建类 seleniumTestJunit.java

        将 Selenium IDE导出的JUnit代码放到此类中,

          此代码中只支持Firefox,后面给出代码支持 IE 和 Chrome。

      2、选择工程, 右键, Build Path -》 Add Library,选择 Junit, 点击next finish。

      3、选择工程, 右键, Build Path -》 Config Build Path,Library 标签页, 点击 Add External Jars,

        添加Selenium Server 和 Java Client Driver

      4、IE 和 Chrome Driver解压到目录:

        C:\Documents and Settings\Administrator\桌面\seleniumtest\

     运行:

      点击开始按钮,依次执行指令,本例中为打开 Baidu页,搜索“母亲节”, 分别执行 firefox chrome 和 IE。

     

    其中,testCases为填充测试用例函数。

    如下对于每个浏览器都执行下面类似三句,有重复语句,扩展性也不好;

    本想使用数组容纳函数, 循环执行, 可惜Java不支持,请Java大侠指点。

          prepareFirefoxDriver();
          testCases();
          testover();
    package com.selenium.test.junitcode;
    
    import java.io.File;
    import java.util.Iterator;
    import java.util.List;
    import java.util.regex.Pattern;
    import java.util.concurrent.TimeUnit;
    
    import org.junit.*;
    
    import static org.junit.Assert.*;
    import static org.hamcrest.CoreMatchers.*;
    
    import org.openqa.selenium.*;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.support.ui.Select;
    
    
    public class seleniumTestJunit {
      private WebDriver driver;
      private String baseUrl;
      private boolean acceptNextAlert = true;
      private StringBuffer verificationErrors = new StringBuffer();
      
      @Before
      public void setUp() throws Exception {
        baseUrl = "http://www.baidu.com";
      }
    
      private void prepareIEDriver(){
        /* IE driver */
        File file = new File("C:\Documents and Settings\Administrator\桌面\seleniumtest\IEDriverServer.exe");
        System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
        driver = new InternetExplorerDriver();
        
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      }
      
      private void prepareFirefoxDriver(){
        /* firefox driver */
        driver = new FirefoxDriver();
    
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      }
      
      private void prepareChromeDriver(){
        File file = new File("C:\Documents and Settings\Administrator\桌面\seleniumtest\chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
        driver = new ChromeDriver();
      }
      
      private void testCases() throws Exception {
        driver.get(baseUrl);
        Thread.sleep(1000);
        driver.findElement(By.id("kw1")).clear();
        driver.findElement(By.id("kw1")).sendKeys("母亲节");
        Thread.sleep(1000);
        driver.findElement(By.id("su1")).click();
        Thread.sleep(3000);
      }
    
      public void testover() throws Exception {
        driver.close();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
          fail(verificationErrorString);
        }
      }
      
      @Test
      public void testTt() throws Exception {
    
          prepareFirefoxDriver();
          testCases();
          testover();
              
          prepareChromeDriver();
          testCases();
          testover();
          
          prepareIEDriver();
          testCases();
          testover();
      }
    
      @After
      public void tearDown() throws Exception {
    
      }
    }

     附录问题查证记录:

    如果IE运行中遇到如下打印, 请退出360安全卫士:

    org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. IELaunchURL() returned HRESULT 80070057 ('参数不正确。') for URL 'http://localhost:48104/' (WARNING: The server did not provide any stacktrace information)
    Command duration or timeout: 5.84 seconds

      

    附录支持Selenium IDE导出JUnit代码:

    package com.example.tests;
    
    import java.util.regex.Pattern;
    import java.util.concurrent.TimeUnit;
    import org.junit.*;
    import static org.junit.Assert.*;
    import static org.hamcrest.CoreMatchers.*;
    import org.openqa.selenium.*;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.Select;
    
    public class Seleniumbaidutest {
      private WebDriver driver;
      private String baseUrl;
      private boolean acceptNextAlert = true;
      private StringBuffer verificationErrors = new StringBuffer();
    
      @Before
      public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "http://www.baidu.com/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      }
    
      @Test
      public void testSeleniumbaidu() throws Exception {
        driver.get(baseUrl + "/");
        driver.findElement(By.id("su")).click();
        driver.findElement(By.id("su1")).click();
        driver.findElement(By.id("kw1")).clear();
        driver.findElement(By.id("kw1")).sendKeys("母亲节");
        driver.findElement(By.id("su1")).click();
      }
    
      @After
      public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
          fail(verificationErrorString);
        }
      }
    
      private boolean isElementPresent(By by) {
        try {
          driver.findElement(by);
          return true;
        } catch (NoSuchElementException e) {
          return false;
        }
      }
    
      private boolean isAlertPresent() {
        try {
          driver.switchTo().alert();
          return true;
        } catch (NoAlertPresentException e) {
          return false;
        }
      }
    
      private String closeAlertAndGetItsText() {
        try {
          Alert alert = driver.switchTo().alert();
          String alertText = alert.getText();
          if (acceptNextAlert) {
            alert.accept();
          } else {
            alert.dismiss();
          }
          return alertText;
        } finally {
          acceptNextAlert = true;
        }
      }
    }
  • 相关阅读:
    Python基础学习四 文件操作(二)
    Python基础学习三 文件操作(一)
    Python基础学习三 字符串
    Python基础学习三 字典、元组
    Python基础学习三 list-增删改查、切片、循环、排序
    python基础4文件操作
    Python基础3切片,字符串的方法,for 循环
    python2和Python3的区别(长期更新)
    Python基础1
    python 中的enumerate()函数的用法
  • 原文地址:https://www.cnblogs.com/lightsong/p/3721354.html
Copyright © 2020-2023  润新知