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. Halo(五)

    ApplicationPreparedEvent 监听事件 Event published once the application context has been refreshed but be ...

  2. Shell脚本并发及并发数的控制

    https://www.jianshu.com/p/701952ffb755 正常情况下,Shell脚本是串行执行的,一条命令执行完才会执行接下来的命令.如下代码: # !/bin/bash for ...

  3. PHP filter_input_array() 函数

    定义和用法 filter_input_array() 函数从脚本外部获取多项输入(比如表单输入),并进行过滤. 该函数对过滤多个输入变量很有用,无需重复调用 filter_input(). 该函数可从 ...

  4. CodeForces 731D (差分+线段扫描)

    Description Archeologists have found a secret pass in the dungeon of one of the pyramids of Cyclelan ...

  5. Jetson Nano系列教程1:烧写系统镜像

    下载镜像 NVIDIA官方为Jetson Nano Developer Kit (后面统称为Jetson Nano了)提供了SD卡版本的系统镜像,并且根据JetPack版本不断得在更新.所以你可以直接 ...

  6. js打印窗口内容并当窗口内容较长时自动分页

    项目环境Angular: 方法1.window.print() HTML页面上的代码: <div id="tenementBillTable" class="dia ...

  7. HTML5: HTML5 内联 SVG

    ylbtech-HTML5: HTML5 内联 SVG 1.返回顶部 1. HTML5 内联 SVG HTML5 支持内联 SVG. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Ve ...

  8. Spring MVC 常用注解 和session界面渲染取值

    @RequestParams name 修饰当前形参的属性 value 和name属性一样 也是修饰当前属性 defaultValue 给属性设置一个默认值 默认属性 required 必备属性 1. ...

  9. AVL树,C语言实现,完整代码,先贴上,讲解稍后

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #de ...

  10. windows 安装虚拟环境

    步骤一:安装virtualenv 在windows cmd终端下使用输入:pip install virtualenv 步骤二:新建虚拟环境 在cmd终端输入virtualenv testvir(环境 ...