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(); } } |
web自动化框架抽取示例【Java+selenium】的更多相关文章
- Web自动化框架LazyUI使用手册(3)--单个xpath抓取插件详解(selenium元素抓取,有此插件,便再无所求!)
概述 前面的一篇博文粗略介绍了基于lazyUI的第一个demo,本文将详细描述此工具的设计和使用. 元素获取插件:LazyUI Elements Extractor,作为Chrome插件,用于抓取页面 ...
- 基于Selenium的web自动化框架
转自 : https://www.cnblogs.com/AlwinXu/p/5836709.html 1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台. ...
- 【转】基于Selenium的web自动化框架(python)
1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Sel ...
- 基于Selenium的Web自动化框架增强篇
在写完上一篇“基于Selenium的Web自动化框架”(http://www.cnblogs.com/AlwinXu/p/5836709.html)之后一直没有时间重新审视该框架,正好趁着给同事分享的 ...
- Web自动化框架LazyUI使用手册(2)--先跑起来再说(第一个测试用例-百度搜索)
作者:cryanimal QQ:164166060 上篇文章中,简要介绍了LazyUI框架,本文便来演示,如何从无到有快速搭建基于lazyUI的工程,并成功运行第一个测试用例. 本文以百度搜索为例,选 ...
- web自动化框架如何设计
web自动化框架如何设计po模式总结: 1. 页面对象模型:当页面特别多的时候,代码更好的维护 2. Po是pageObject设计模式,用来管理和维护一组web元素的对象库 3. 每一个page c ...
- Web自动化框架LazyUI使用手册(1)--框架简介
作者:cryanimal QQ:164166060 web端自动化简介 web端自动化,即通过自动化的方式,对Web页面施行一系列的仿鼠标键盘操作,以达到对Web页面的功能进行自动化测试的目的. 其一 ...
- 【Selenium01篇】python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作!
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 二.话不多说,直接开干,开始搭建自动化测试环境 这里以前在 ...
- web自动化框架—BasePage 类的简单封装
优秀的框架都有属于自己的思想,在搭建web自动化测试框架时,我们通常都遵循 PO(Page Object)思想. 简单理解就是我们会把每个页面看成一个对象,一切皆对象,面向对象编码,这样会让我们更好的 ...
随机推荐
- 第06章 AOP XML
第06章 以XML方式配置切面 1.概述 除了使用AspectJ注解声明切面,Spring也支持在bean配置文件中声明切面.这种声明是通过aop名称空间中的XML元素完成的. 正常情况下,基于注解的 ...
- array_reduce — 用回调函数迭代地将数组简化为单一的值
定义和用法 array_reduce() 函数向用户自定义函数发送数组中的值,并返回一个字符串. 注释:如果数组是空的且未传递 initial 参数,该函数返回 NULL. 说明 array_redu ...
- 数据结构---Java---String
1.概述 1.1 源码(JDK1.8) public final class String implements java.io.Serializable, Comparable<String& ...
- 【leetcode】1001. Grid Illumination
题目如下: On a N x N grid of cells, each cell (x, y) with 0 <= x < N and 0 <= y < N has a la ...
- boost scope exit
Boost.ScopeExit provides the macro BOOST_SCOPE_EXIT, which can be used to define something that look ...
- Linq 使用Startswith 出现空引用的问题
一.问题 我使用的是Entity Fromwork CodeFirst来操作数据库,昨天在使用startswith查询数据的时候发现一个问题,就是经常一直报空引用的错误,查了很久才找到原因,这里做一个 ...
- jsp标签的介绍
cankao:http://www.cnblogs.com/xdp-gacl/p/3788369.html jsp常用的标签有以下3个 1.<jsp:include>标签 2.<js ...
- Hibernate学习 (一)
Hibernate错误总结: 1:不能自动创建表.把MySQL的版本的方言修改一下. 首先自己要注意自己的MYSQL版本,然后设置对应的方言 兼容性模式 <property name=" ...
- [CSP-S模拟测试]:工业题/a(数学)
题目传送门(内部题39) 输入格式 第一行:四个正整数$n$.$m$.$a$.$b$.第二行:$n$个正整数,第$i$个表示$f(i,0)$.第三行:$m$个正整数,第$i$个表示$f(0,i)$. ...
- eclipse debug (调试)基础
进入debug模式: 1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ============================= 作用域 ...