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】的更多相关文章

  1. Web自动化框架LazyUI使用手册(3)--单个xpath抓取插件详解(selenium元素抓取,有此插件,便再无所求!)

    概述 前面的一篇博文粗略介绍了基于lazyUI的第一个demo,本文将详细描述此工具的设计和使用. 元素获取插件:LazyUI Elements Extractor,作为Chrome插件,用于抓取页面 ...

  2. 基于Selenium的web自动化框架

    转自 : https://www.cnblogs.com/AlwinXu/p/5836709.html 1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台. ...

  3. 【转】基于Selenium的web自动化框架(python)

    1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Sel ...

  4. 基于Selenium的Web自动化框架增强篇

    在写完上一篇“基于Selenium的Web自动化框架”(http://www.cnblogs.com/AlwinXu/p/5836709.html)之后一直没有时间重新审视该框架,正好趁着给同事分享的 ...

  5. Web自动化框架LazyUI使用手册(2)--先跑起来再说(第一个测试用例-百度搜索)

    作者:cryanimal QQ:164166060 上篇文章中,简要介绍了LazyUI框架,本文便来演示,如何从无到有快速搭建基于lazyUI的工程,并成功运行第一个测试用例. 本文以百度搜索为例,选 ...

  6. web自动化框架如何设计

    web自动化框架如何设计po模式总结: 1. 页面对象模型:当页面特别多的时候,代码更好的维护 2. Po是pageObject设计模式,用来管理和维护一组web元素的对象库 3. 每一个page c ...

  7. Web自动化框架LazyUI使用手册(1)--框架简介

    作者:cryanimal QQ:164166060 web端自动化简介 web端自动化,即通过自动化的方式,对Web页面施行一系列的仿鼠标键盘操作,以达到对Web页面的功能进行自动化测试的目的. 其一 ...

  8. 【Selenium01篇】python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 二.话不多说,直接开干,开始搭建自动化测试环境 这里以前在 ...

  9. web自动化框架—BasePage 类的简单封装

    优秀的框架都有属于自己的思想,在搭建web自动化测试框架时,我们通常都遵循 PO(Page Object)思想. 简单理解就是我们会把每个页面看成一个对象,一切皆对象,面向对象编码,这样会让我们更好的 ...

随机推荐

  1. 百度语音 python

    python实现语音识别 我们用到是百度语音识别,因为不掏钱哈哈!首先去百度官网去创建你的 APPID AK SK 这个网上很多大家没创建的自己看下 目前本SDK的功能同REST API,需要联网调用 ...

  2. 部署core

    https://www.cnblogs.com/jasonduan/p/9193702.html

  3. BlueStore-先进的用户态文件系统《二》-BlueFS

    https://zhuanlan.zhihu.com/p/46362124 简介 上一篇文章中,介绍了BlueStore的诞生背景.逻辑架构以及设计思想,提到了在BlueStore中元数据都是存放在R ...

  4. oracle的查询结果按照in条件顺序输出

    业务需要,通过lucene查出符合搜索条件的id,然后在详情表里查出这些id的详情 ? 1 SELECT id,QUESTION,QUESTIONCOMMENT FROM "ASKDBA_Q ...

  5. vue 学习中遇到的一些问题

    Vue中data有return返回函数问题: 在简单的vue实例中会看到Vue实例中data属性展示方式如下: let app= newVue({ el:"#app", data: ...

  6. 如何做LR自动关联和手动关联?

    一.什么时候需要关联   1.关联的含义        关联的含义A(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容 ...

  7. jmeter之--断言json响应&json path espressions的语法

    一.提取所需要断言的内容: 响应数据如下:加入需要提取id为90的值 { , "name" : "python", "url" : &quo ...

  8. Django中get()和fiter()的区别

    QuerySet(查询结果集对象):从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet,也就是指服务器上的url里面的查询内容.Django会对查询返回的结果集QuerySet进行 ...

  9. 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas

    1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...

  10. java并发编程笔记(三)——线程安全性

    java并发编程笔记(三)--线程安全性 线程安全性: ​ 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现 ...