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();

}

}

转载于:https://www.cnblogs.com/Nancy-Lee/p/11043859.html

web自动化框架抽取示例【Java+selenium】相关推荐

  1. python 自动化框架_学会Python+Selenium,分分钟搭建Web自动化框架!

    用python+selenium实现UI自动化测试,要有一些HTML和xpth的基础,当然python基础一定是必须要会的.笔者建议花点时间了解下相关基础知识,不至于后面发懵. 一.什么是seleni ...

  2. python的web自动化框架实例_Selenium基于Python web自动化测试框架 -- PO

    关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的概念和理解: PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...

  3. 自动化用例设计原则+web自动化框架

    自动化用例设计原则 web自动化框架 PO模式就是页面对象和测试用例的分离. PageObjects放页面对象,封装元素定位和元素操作(也可以单独把元素定位放到PageLocators层) basep ...

  4. WEB自动化(4)使用selenium将网站验证码截图保存为本地图片

    WEB自动化(1)环境安装及打开浏览器实例 WEB自动化(2)常用的元素定位方法之xpath详解 WEB自动化(3)PO设计模式原理与实现 WEB自动化(4)使用selenium将网站验证码截图保存为 ...

  5. Web 自动化解决方案 [开源项目] 基于 Selenium 的 Web 自动化测试框架完美版

    欢迎查阅Selenium(Web自动化测试框架体系) Selenium ) Selenium是一个用于Web应用程序的自动化测试工具,直接运行在浏览器中,就像真正的用户在操作一样• 支持的浏览器包括I ...

  6. python selenium 获取元素下的元素个数_Python + Selenium,分分钟搭建 Web 自动化框架!(送自动化测试书籍)...

    前言 在程序员的世界中,一切重复性的工作,都应该通过程序自动执行.「自动化测试」就是一个最好的例子.随着互联网应用开发周期越来越短,迭代速度越来越快,只会点点点,不懂开发的手工测试,已经无法满足如今的 ...

  7. python selenium po模式_Python+Selenium+Unittest实现PO模式web自动化框架

    1)效率高 :PO模式的逻辑层方法有具体定义,元素发生变化修改逻辑层,业务层不变.这样看来结构简单清晰,舒服更符合人类习惯, 普通方式就是继续堆case. 2) 复用多收益大: 同样这里如果逻辑复用越 ...

  8. java和python的web自动化有什么区别-Java 和 Python 有哪些区别?

    区别 一.python虚拟机没有java强,java虚拟机是java的核心,python的核心是可以很方便地使用c语言函数或c++库. 二.python是全动态性的,可以在运行时自己修改自己的代码,j ...

  9. python web自动化元素定位_快速掌握Python Selenium Web自动化:三)在Selenium中定位查找网页元素的诸类方法...

    使用Selenium进行自动化操作,首先要做的就是通过webdriver的get()方法打开一个URL链接. 在打开链接,完成页面加载之后,就可以通过Selenium提供的接口,在页面上进行各种操作了 ...

最新文章

  1. 《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图...
  2. 第2章 熟悉Eclipse开发工具---- System.out.println(sum=+(a+b));
  3. POJ3757 01分数规划
  4. Cesium在地球上添加一个3D立方体
  5. 虚拟机备份oracle异常,客户端连接虚拟机Oracle服务器异常
  6. 21世纪的设计模式:适配器模式
  7. 通透!数据仓库领域常见建模方法及实例演示
  8. Atitit 验证码功能修复总结文档原有的tp5里面的验证码不知怎么有问题了,试图在tp5框架内修复无果。。使用了新的验证码组件 “lifei6671/php-captcha“: “0.
  9. ecg 幅度_精确心电图(ECG)信号处理
  10. 服务器网络连接详细信息,Windows10怎么样查看网络连接详细信息
  11. qss之QRadioButton
  12. 抖音一个老人和一个机器人歌曲_抖音M哥很火的歌曲有哪些
  13. 关于数据依赖的公理系统之Armstrong公理系统推理证明
  14. 03 【Nginx虚拟主机和域名解析】
  15. 2017年计算机二级有什么好处,2017年计算机二级考试备考的五大法宝
  16. 【python初级】 关于time.sleep睡眠时间
  17. Linux eBPF内核源码sample/bpf全网最细解析(一)
  18. 使用DHT11和51单片机进行温湿度的读取(保证好用版本)
  19. ch.ethz.ganymed包ganymed-ssh2的使用
  20. stm32c8t6+dht11+MQ系列环境检测模块+oled显示屏(基于物联网的家庭环境检测系统设计)

热门文章

  1. 20165223《网络对抗技术》Exp3 免杀原理与实践
  2. php apache 配置后不能正常显示html文件的解决方法
  3. C++---容器适配器(stack、queue、priority_queue)
  4. VScode自动跳转到某一行代码
  5. 零基础带你学习MySQL—Delete语句以及注意事项(九)
  6. JavaScript学习(四十七)—构造方法创建对象的不足
  7. 塑料壳上下扣合的卡扣设计_塑胶产品结构设计--卡扣.pdf
  8. 数组的基本操作(1)
  9. 股票冲高回落意味着什么?
  10. 装修要找大品牌还是游击队,还是包工头?