zoukankan      html  css  js  c++  java
  • web自动化框架抽取示例【Java+selenium】

    web自动化测试框架抽取示例

    例子:测试登录模块,对登录的账号和密码进行不同的case校验。

    1.1.1 无优化代码login_1

    package com.lee.auto.testFrome;

    import org.openqa.selenium.By;

    import org.openqa.selenium.chrome.ChromeDriver;

    public class login_1 {

           public static void main(String[] args) throws InterruptedException {

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver = new ChromeDriver();

                  driver.get("测试url");

                  driver.findElement(By.xpath("//*[@id="username"]")).sendKeys("15920000001");

                  driver.findElement(By.xpath("//*[@id="password"]")).sendKeys("11111111");

           driver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver.close();

                 

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver1 = new ChromeDriver();

                  driver1.get("测试url");

               driver1.findElement(By.xpath("//*[@id="username"]")).sendKeys("15920000001");

                  driver1.findElement(By.xpath("//*[@id="password"]")).sendKeys("1111");

           driver1.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver1.close();

                 

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver2 = new ChromeDriver();

                  driver2.get("测试url");

                  driver2.findElement(By.xpath("//*[@id="username"]")).sendKeys("15720000001");

                  driver2.findElement(By.xpath("//*[@id="password"]")).sendKeys("11111111");

           driver2.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver2.close();

           }

    }

    1.1.2 初步抽取login_2

    以上代码实现账号、密码的三种验证,下面首先对这三种验证进行方法的抽取,代码如下:

    package com.lee.auto.testFrome;

    import org.openqa.selenium.By;

    import org.openqa.selenium.WebElement;

    import org.openqa.selenium.chrome.ChromeDriver;

    public class login_2 {

           public static void main(String[] args) throws InterruptedException  {

                  case_1();

                  case_2();

                  case_3();

           }

           private static void case_1() throws InterruptedException {

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver = new ChromeDriver();

                  driver.get("测试url");

                  driver.findElement(By.xpath("//*[@id="username"]")).sendKeys("15920000001");;

                  driver.findElement(By.xpath("//*[@id="password"]")).sendKeys("11111111");;

      driver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_2() throws InterruptedException {

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver = new ChromeDriver();

                  driver.get("测试url");

                  driver.findElement(By.xpath("//*[@id="username"]")).sendKeys("15920000001");;

                  driver.findElement(By.xpath("//*[@id="password"]")).sendKeys("1111");;

           driver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_3() throws InterruptedException {

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver = new ChromeDriver();

                  driver.get("测试url");

                  driver.findElement(By.xpath("//*[@id="username"]")).sendKeys("15720000001");;

                  driver.findElement(By.xpath("//*[@id="password"]")).sendKeys("11111111");;

           driver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

    }

    方法抽取方式如下:

    在main函数中选取需要抽取方法的代码,右键选择refactor-extract method即可进行抽取。

    1.1.3 工具类封装login_3

    对生成的chrome驱动进行工具类的封装。

    package com.lee.auto.testFrome;

    import org.openqa.selenium.chrome.ChromeDriver;

    public class exploreTool {

           //方法的抽取

           public static ChromeDriver getChromeDriver() {

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver = new ChromeDriver();

                  return driver;

           }

    }

    package com.lee.auto.testFrome;

    import org.openqa.selenium.By;

    import org.openqa.selenium.WebDriver;

    import org.openqa.selenium.WebElement;

    import org.openqa.selenium.chrome.ChromeDriver;

    public class login_3 {

           public static void main(String[] args) throws InterruptedException  {

                  case_1();

                  case_2();

                  case_3();

           }

           private static void case_1() throws InterruptedException {

                  ChromeDriver driver = exploreTool.getChromeDriver();

                  driver.get("测试url");

                  driver.findElement(By.xpath("//*[@id="username"]")).sendKeys("15920000001");;

                  driver.findElement(By.xpath("//*[@id="password"]")).sendKeys("11111111");;

           driver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_2() throws InterruptedException {

                  ChromeDriver driver1 = exploreTool.getChromeDriver();

                  driver1.get("测试url");

                  driver1.findElement(By.xpath("//*[@id="username"]")).sendKeys("15920000001");

                  driver1.findElement(By.xpath("//*[@id="password"]")).sendKeys("1111");

           driver1.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver1.close();

           }

           private static void case_3() throws InterruptedException {

                  ChromeDriver driver2 = exploreTool.getChromeDriver();

                  driver2.get("测试url");

                  driver2.findElement(By.xpath("//*[@id="username"]")).sendKeys("15720000001");

                  driver2.findElement(By.xpath("//*[@id="password"]")).sendKeys("11111111");

           driver2.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/form/section[3]/span/input")).click();

                  Thread.sleep(5000);

                  driver2.close();

           }

    }

    下面代码为三个浏览器进行登录实现。

    package com.lee.auto.testFrome;

    import org.openqa.selenium.chrome.ChromeDriver;

    import org.openqa.selenium.firefox.FirefoxDriver;

    import org.openqa.selenium.ie.InternetExplorerDriver;

    import org.openqa.selenium.ie.InternetExplorerDriverService;

    import org.openqa.selenium.remote.DesiredCapabilities;

    public class exploreTool {

           // 方法的抽取

           public static ChromeDriver getChromeDriver() {

                  System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                  ChromeDriver driver = new ChromeDriver();

                  return driver;

           }

           public static FirefoxDriver getFirefoxDriver() {

                  System.setProperty("webdriver.firefox.bin", "D:\Program\firefox47.0.2\bin\firefox.exe");

                  FirefoxDriver driver = new FirefoxDriver();

                  return driver;

           }

           public static InternetExplorerDriver getIEDriver() {

                  System.setProperty("webdriver.ie.driver", "src/IEDriverServer32.exe");

                  InternetExplorerDriver driver = new InternetExplorerDriver();

                  return driver;

           }

    }

    package com.lee.auto.testFrome;

    import org.openqa.selenium.By;

    import org.openqa.selenium.Keys;

    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;

    public class login_4 {

           public static void main(String[] args) throws InterruptedException {

                  case_1();

                  case_2();

                  case_3();

           }

           private static void case_1() throws InterruptedException {

                  ChromeDriver driver = exploreTool.getChromeDriver();

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  driver.findElement(By.name("submit")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_2() throws InterruptedException {

                  FirefoxDriver driver = exploreTool.getFirefoxDriver();

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  driver.findElement(By.name("submit")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_3() throws InterruptedException {

                  InternetExplorerDriver driver = exploreTool.getIEDriver();

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  // 直接使用click点击无效,采用keys.enter方式进行登录

                  driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);

                  Thread.sleep(5000);

                  driver.close();

           }

    }

    IE报错1

    Exception in thread "main" org.openqa.selenium.NoSuchWindowException: Unable to find element on closed window (WARNING: The server did not provide any stacktrace information)

    解决方法:需要把IE安全设置的四个区域的保护模式设置一致。

    IE问题2

    页面可以找到登录元素,但是click无效。

    解决方法:采用keys.enter方式进行登录。

    IE问题3

    找到账号、密码文本框后输入值特别慢。

    解决方法:将IEDriverServer由64位的换为32位的。

    1.1.4 多态的使用login_5

    对于多个浏览器的驱动生成,可以借助webdriver接口进行多态实现。

    通过传入的参数值来判断所需的浏览器类型。

    package com.lee.auto.login;

    import org.openqa.selenium.WebDriver;

    import org.openqa.selenium.chrome.ChromeDriver;

    import org.openqa.selenium.firefox.FirefoxDriver;

    import org.openqa.selenium.ie.InternetExplorerDriver;

    public class exploreTool_1 {

          

           public static WebDriver getexploreDriver(String exploreType) {

                 

                  WebDriver driver = null;

                  //判断为chrome

                  if (exploreType.equals("chrome")) {

                         System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                         driver = new ChromeDriver();

                  }

                  //判断为Firefox

                  else if (exploreType.equals("firefox")) {

                         System.setProperty("webdriver.firefox.bin", "D:\Program\firefox47.0.2\bin\firefox.exe");

                         driver = new FirefoxDriver();

                  }

                  //判断为IE

                  else if (exploreType.equals("ie")) {

                         System.setProperty("webdriver.ie.driver", "src/IEDriverServer32.exe");

                         driver = new InternetExplorerDriver();

                  }

                  return driver;

       }

    }

    package com.lee.auto.login;

    import org.openqa.selenium.By;

    import org.openqa.selenium.Keys;

    import org.openqa.selenium.WebDriver;

    public class login_5 {

           public static void main(String[] args) throws InterruptedException {

                  case_1();

                  case_2();

                  case_3();

           }

           private static void case_1() throws InterruptedException {

                  WebDriver driver = exploreTool_1.getexploreDriver("chrome");

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  driver.findElement(By.name("submit")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_2() throws InterruptedException {

                  WebDriver driver = exploreTool_1.getexploreDriver("firefox");

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  driver.findElement(By.name("submit")).click();

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_3() throws InterruptedException {

                  WebDriver driver = exploreTool_1.getexploreDriver("ie");

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  // 直接使用click点击无效,采用keys.enter方式进行登录

                  driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);

                  Thread.sleep(5000);

                  driver.close();

           }

    }

    1.1.5 配置文件的使用login_6

    若多条用例都需要通过exploreTool_1.getexploreDriver方法来获取浏览器驱动,一旦需要切换浏览器,就需要大量修改代码来完成。为了避免此问题,将变动数据采用配置文件方式传入,实现数据和代码的分离。

    1.1.5.1新建配置文件

    新建配置文件,自定义参数值。

    参数值定义格式:

    key = value

    1.1.5.2读取参数

    步骤如下:

    • 创建属性对象
    • 加载配置文件
    • 获取文件中属性值

    auto.browserType = ie

    package com.lee.auto.login;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import java.util.Properties;

    import org.openqa.selenium.WebDriver;

    import org.openqa.selenium.chrome.ChromeDriver;

    import org.openqa.selenium.firefox.FirefoxDriver;

    import org.openqa.selenium.ie.InternetExplorerDriver;

    public class exploreTool_2 {

          

           public static WebDriver getexploreDriver() {

                  //读取配置文件

                  //创建属性对象

                  Properties properties = new Properties();

                  //对加载的文件抛出找不到文件时的异常

                  try {

                         //通过属性对象加载文件

                         properties.load(new FileInputStream("src/config.properties"));

                  } catch (FileNotFoundException e) {

                         e.printStackTrace();

                  } catch (IOException e) {

                         e.printStackTrace();

                  }

                  //获取配置文件中的属性值

                  String exploreType = properties.getProperty("auto.browserType");

                 

                  WebDriver driver = null;

                  //判断为chrome

                  if (exploreType.equals("chrome")) {

                         System.setProperty("webdriver.chrome.driver", "src/chromedriver.exe");

                         driver = new ChromeDriver();

                  }

                  //判断为Firefox

                  else if (exploreType.equals("firefox")) {

                         System.setProperty("webdriver.firefox.bin", "D:\Program\firefox47.0.2\bin\firefox.exe");

                         driver = new FirefoxDriver();

                  }

                  //判断为IE

                  else if (exploreType.equals("ie")) {

                         System.setProperty("webdriver.ie.driver", "src/IEDriverServer32.exe");

                         driver = new InternetExplorerDriver();

                  }

                  return driver;

       }

    }

    package com.lee.auto.login;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import org.openqa.selenium.By;

    import org.openqa.selenium.Keys;

    import org.openqa.selenium.WebDriver;

    public class login_6 {

           public static void main(String[] args) throws InterruptedException{

                  case_1();

                  case_2();

                  case_3();

           }

           private static void case_1() throws InterruptedException{

                  WebDriver driver = exploreTool_2.getexploreDriver();

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_2() throws InterruptedException{

                  WebDriver driver = exploreTool_2.getexploreDriver();

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("15920000001");

                  driver.findElement(By.id("password")).sendKeys("1111");

                  driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);

                  Thread.sleep(5000);

                  driver.close();

           }

           private static void case_3() throws InterruptedException{

                  WebDriver driver = exploreTool_2.getexploreDriver();

                  driver.get("测试url");

                  driver.findElement(By.id("username")).sendKeys("");

                  driver.findElement(By.id("password")).sendKeys("11111111");

                  // 直接使用click点击无效,采用keys.enter方式进行登录

                  driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);

                  Thread.sleep(5000);

                  driver.close();

           }

    }

  • 相关阅读:
    JS定时执行,循环执行
    Ecshop(二次开发)
    百度歌曲接口
    给大家讲讲在哪些地方发外链最好
    360浏览器默认以兼容模式或急速模式方式打开页面
    子iframe 怎么调用 父级的JS函数
    ASP 发送邮件
    PHP发送邮件
    php表单数据验证类
    js获取url传递参数
  • 原文地址:https://www.cnblogs.com/Nancy-Lee/p/11043859.html
Copyright © 2011-2022 走看看