Selenium自动化实现web自动化-1
框架搭建
基于maven+jdk8+junit5+seleium 构建
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>1.5.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.6.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-java-commons</artifactId>
<version>2.13.5</version>
<scope>compile</scope>
</dependency>
</dependencies>
驱动下载
下载地址 :http://chromedriver.storage.googleapis.com/index.html
测试demo
@Test
public void test1() throws IOException {
ChromeDriver driver = new ChromeDriver();
System. setProperty("webdriver.chrome.driver", "path");
//设置全屏
driver.manage().window().maximize();
driver.get("https://home.testing-studio.com/");
//d.findElement(By.cssSelector(". d-button-abl").cick();
driver.findElement(By.xpath("//span[contains(text(),'登录')]")).click();
snapshot((TakesScreenshot)driver, "截图"+FakerUtils.getTimeStamp()+".jpg");
}
截图方法:TakesScreenshot接口是依赖于具体的浏览器API操作的
// 截屏方法
public static void snapshot(TakesScreenshot drivername, String filename) {
String currentPath = System.getProperty("user.dir"); //get current work folder
System.out.println(currentPath);
File scrFile = drivername.getScreenshotAs(OutputType.FILE);
try {
System.out.println("save snapshot path is:"+currentPath+"/"+filename);
FileUtils.copyFile(scrFile, new File(currentPath+"\\"+filename));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Can't save screenshot");
e.printStackTrace();
} finally {
System.out.println("screen shot finished");
}
}
执行
用列录制
使用seleniumIDE 录制
- 新建一个录制project
输入网站开始录制,并在录制的网页上执行搜索
当Test越来越多时,可以将多个Test归类到Suites中,Suites就像小柜子
创建项目时,IDE会创建一个默认Suite,并将第一个Test添加到其中,你可以点击Test,在下拉菜单中选中Test suites进入Suites管理界面
首先进入Suites管理界面,点击`+`,提供名称,然后单击add:
将鼠标悬停在`suite1`上,点击三个点弹出Suites管理菜单:
可以对`suite1`进行管理,包括添加test,重命名,删除,设置,导出
用例的编写
public class testCase {
public static WebDriver driver;
@BeforeAll
static void initData(){
//加载驱动
driver=new ChromeDriver();
// 设置全局隐式等待 5S
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
@Test
void Login(){
//读取测试链接
driver.get("https://home.testing-studio.com/");
//获取登录按钮
driver.findElement(By.xpath("//span[contains(text(),'登录')]")).click();
driver.manage().window().maximize();
//清理记住的原账号与密码
driver.findElement(By.id("login-account-name")).clear();
driver.findElement(By.id("login-account-name")).sendKeys("*");
driver.findElement(By.id("login-account-password")).clear();
driver.findElement(By.id("login-account-password")).sendKeys("*");
driver.findElement(By.id("login-button")).click();
// 截图
FakerUtils.snapshot((TakesScreenshot)driver,"截图"+FakerUtils.getTimeStamp()+".jpg");
}
@AfterAll
static void tearDown(){
driver.quit();
}
}
执行分析:
Driver的初始化,每个测试用例执行都可以通过这个一个方法获得一个driver.get()打开一个网址
find_element(By.定位符,")
一个页面还没有完全加载完全,点击这个元素,发现这个元素是有问题的,元素找不到或者不可点击,等等,可以强行加sleep(不推荐)
每个元素定位的时候,都会去find_element查找一个元素,在这个时候,通常我们需要引入一个新的机制,这个机制叫做隐式等待,解决元素找不到的问题,在规定的时间内,自动的去等待元素的出现,元素找到了,但是状态不对,不可点击也会报错
等待方式
隐式等待:
设置一个等待时间轮询(默认0.5s)查找 元素是否出现 (服务端)
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
显式等待:
在客户端本地每隔0.5s巡查下条件是否匹配 需要 实例化 webdriverwait
在代码中定义等待条件,当条件发生时才继续执行代码`WebDriverWait`配合until()方法,根据判断条件进行等待
程序每隔一段时间(默认为0.5秒)进行条件判断,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间
webDriverWait= new WebDriverWait(driver,100L);
强制等待
线程等待,线程休眠一段时间,Thread.sleep(2000)
Selenium自动化实现web自动化-1的更多相关文章
- Selenium基于Python web自动化基础一 -- 基础汇总及简单操作
Selenium是UI层WEB端的自动化测试框架,也是目前市面上比较流行的自动化测试框架. ui层自动化测试本质是什么?模拟用户的真实操作行为. 基础汇总: 导入所需要的模块 from seleniu ...
- Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架
一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
- 基于Selenium的web自动化框架
转自 : https://www.cnblogs.com/AlwinXu/p/5836709.html 1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台. ...
- 【转】基于Selenium的web自动化框架(python)
1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Sel ...
- web自动化原理
在说原理之前我想说下我所理解的selenium: (1).支持多语言,多平台,多浏览器 (2).它是一个工具包 (3).提供所有的网页操作api,是一个功能库 通过selenium来实现web自动化, ...
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 3. ...
- Selenium Web 自动化 - 项目持续集成(进阶)
Selenium Web 自动化 - 项目持续集成(进阶) 2017-03-09 目录 1 背景及目标2 环境配置 2.1 SVN的安装及使用 2.2 新建Jenkins任务3 过程分析 1 背景 ...
- Selenium Web 自动化 - 项目持续集成
Selenium Web 自动化 - 项目持续集成 2017-02-13 目录 1环境准备 1.1 安装git 1.2 安装jenkins 1.3 安装jenkins插件 1.4 jekins ...
- Web自动化框架LazyUI使用手册(3)--单个xpath抓取插件详解(selenium元素抓取,有此插件,便再无所求!)
概述 前面的一篇博文粗略介绍了基于lazyUI的第一个demo,本文将详细描述此工具的设计和使用. 元素获取插件:LazyUI Elements Extractor,作为Chrome插件,用于抓取页面 ...
随机推荐
- SpringBoot 默认json解析器详解和字段序列化自定义
前言 在我们开发项目API接口的时候,一些没有数据的字段会默认返回NULL,数字类型也会是NULL,这个时候前端希望字符串能够统一返回空字符,数字默认返回0,那我们就需要自定义json序列化处理 Sp ...
- 用好WinSCP,无惧Linux命令
很多人惧怕Linux系统的命令操作模式.实际上对于普通用户来说用到命令的概率非常小. 我们在实践过程中发现管理Linux系统,最多使用如下两个工具: WinSCP(必用):可视化界面工具,实现文件管理 ...
- SpringMVC 源码解析笔记
作者笔记仓库:https://github.com/seazean/javanotes 欢迎各位关注我的笔记仓库,clone 仓库到本地后使用 Typora 阅读效果更好. 一.调度函数 请求进入原生 ...
- JAVAWEB的基本入门(JSP、Tomcat)>从零开始学JAVA系列
目录 JAVAWEB的基本入门(JSP.Tomcat) 使用idea创建web项目的两种方式 1.直接创建一个web项目(这样创建好的项目可以直接运行) 2.创建一个普通的java项目并配置web模块 ...
- OpenGL学习笔记(四)纹理
目录 要完成的纹理效果 纹理环绕方式 纹理过滤 多级渐远纹理 加载与创建纹理 stb_image库的使用方法 生成纹理对象 应用纹理 纹理单元 参考资料:OpenGL中文翻译 要完成的纹理效果 纹理是 ...
- 一口气说出 Redis 16 个常见使用场景!
1.缓存 String类型 例如:热点数据缓存(例如报表.明星出轨),对象缓存.全页缓存.可以提升热点数据的访问数据. 文章首发于:http://ht5n8.cn/LEc6v 2.数据共享分布式 St ...
- 双非本科字节跳动Android面试题分享(已拿offer)
基本情况 本人系非985非211普通本科生一枚,有实习有项目经历但成绩普通,在面试前刷了很多面经.面试题,这里也把自己的分享下,做个回报好了,顺便攒攒人品,一到这种时候人就迷信起来了. 面试是以视频面 ...
- SpringMVC学习08(拦截器)
8.拦截器 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自己定义一些拦截器来实现特定的功能. 过滤器与拦截器的区别: ...
- Java JVM【笔记】
Java JVM[笔记] Java的平台无关性是如何实现的? Java源码首先被编译成字节码,再由不同的平台的JVM进行解析,Java语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字 ...
- Upfile的几种常见姿势
记录一下文件上传的常见姿势,更全面的可以做upload-labs. 实验环境:win2003 phpstudy 实验平台:upfile 一.准备上传的一句话木马 eval函数将接受的字符串当做代码执行 ...