自动化测试selenium

目录

什么是自动化测试

什么是selenium

selenium工作原理

selenium环境搭建

1.查看chrome浏览器版本

2.下载chrome浏览器驱动

3.配置系统环境变量PATH

4.验证环境是否搭建成功

selenium相关API

1.定位元素

CSS选择器定位

xpath定位元素

标签定位元素

2.操作测试对象

3.添加等待

4.打印信息

5.浏览器的操作

6.键盘事件

7.切换窗口


什么是自动化测试

将人工要做的测试化工作进行转换,让代码去执行测试工作。这样可以提高测试效率,提高测试产品的质量。

自动化分类:单元自动化测试、接口自动化测试、UI自动化测试

什么是selenium

做UI自动化测试的工具

为什么使用selenium?

1、免费,可以查看源码

2、支持各种浏览器

3、跨平台(Linux、Windows、Mac)

4、有丰富的API

selenium工作原理

三个角色:

1.自动化脚本代码(在idea中写的代码)

2.驱动:有了这个驱动后可以对页面进行操作

3.浏览器

使用Selenium IDE录制脚本

selenium环境搭建

windows电脑环境搭建-chrome浏览器

1.查看chrome浏览器版本

2.下载chrome浏览器驱动

https://chromedriver.chromium.org/downloads

把Chromediver.exe复制到Chrome浏览器所在的同级目录下

3.配置系统环境变量PATH

4.验证环境是否搭建成功

1.创建java项目,添加pom文件中添加依赖

<dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency>
</dependencies>

2.编写代码运行

public class Main {public static void main(String[] args) {//创建的驱动WebDriver webDriver = new ChromeDriver();//打开百度webDriver.get("https://www.baidu.com");}
}

selenium相关API

webdriver 提供了一系列的对象定位方法。

1.定位元素

CSS选择器定位

1、类选择器: .class值

2、id选择器:#id值

3、父类选择器 子类选择器:

父类选择器表达式   子类选择器表达式

4、标签选择器:

form、body....

public class Main {public static void main(String[] args) {//创建的驱动WebDriver webDriver = new ChromeDriver();//打开百度webDriver.get("https://www.baidu.com");//定位百度搜素框//通过css选择器定位元素WebElement search_input = webDriver.findElement(By.cssSelector(".s_ipt"));if(search_input==null){System.out.println("测试未通过!");}else {System.out.println("测试通过!");}//关闭浏览器//quit关闭还删掉了浏览器中的cookie,删除更彻底(推荐)webDriver.quit();//close删除信息不彻底//webDriver.close();}
}

xpath定位元素

xpath和css一样,也是一个语法。

绝对路径:通过/开头

/html/body/div/div(不常用)

相对路径:通过//开头

1.相对路径+索引

2.相对路径+属性的值

3.相对路径+通配符

4.相对路径+文本匹配

    //通过xpath定位元素WebElement search_input=webDriver.findElement(By.xpath("//form/span[1]/input"));

css选择器和xpath的区别:css选择器的效率更高

标签定位元素

  //通过标签定位元素WebElement search_input=webDriver.findElement(By.tagName("input"));

2.操作测试对象

webdriver 中比较常用的操作对象的方法有下面几个:

click :点击对象

send_keys :在对象上模拟按键输入

clear :清除对象输入的文本内容

submit :提交

text ::用于获取元素的文本信息

getAttribute:获取元素的属性值

举例:

 private static void Test02() throws InterruptedException {//创建一个浏览器的驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com/");//找到搜索输入框WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));//向搜索输入框中输入”软件测试“search_input.sendKeys("软件测试");//找到百度一下WebElement baidu_button = webDriver.findElement(By.cssSelector("#su"));//点击百度一下baidu_button.click();sleep(3000);//找到页面上所有关于“软件测试”的元素List<WebElement> search_results = webDriver.findElements(By.cssSelector("a em"));sleep(3000);//遍历List//如果元素文本等于软件测试,测试通过//如果搜索结果中没有软件测试,测试不通过,否则测试通过for (int i = 0; i < search_results.size(); i++) {if (search_results.get(i).getText().equals("软件测试")) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}}

private static void Test03() throws InterruptedException {//创建驱动WebDriver webDriver=new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//找到搜索输入框WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));//向搜索输入框中输入”软件测试“search_input.sendKeys("软件测试");//找到搜索输入框//清空百度输入框里面的内容search_input.clear();//向百度输入框中输入“前端”search_input.sendKeys("前端");//找到百度一下WebElement baidu_button= webDriver.findElement(By.cssSelector("#su"));//点击百度一下baidu_button.click();//校验结果有没有“前端”int flag=0;sleep(3000);List<WebElement> search_results = webDriver.findElements(By.xpath("//font[text()=\"前端\"]"));sleep(3000);for (int i = 0; i < search_results.size(); i++) {if (search_results.get(i).getText().equals("前端")) {flag = 1;break;}}if(flag==1){System.out.println("测试通过!");}else{System.out.println("测试不通过!");}}

click点击对象和submit提交之间的区别:

click方法主要用于触发元素上的点击事件,而submit方法主要用于提交表单数据。

submit操作的元素需要放到form标签中,否则会报错。click没有限制,推荐使用click。

3.添加等待

在网页自动化测试中,有时候会遇到代码执行速度比页面渲染速度快的情况。这可能会导致测试失败,因为测试代码尝试在页面还没有完全加载或渲染完成时对其进行操作。

解决这个问题的方法通常包括以下几点:

1.sleep( );

2、显式等待(Explicit Waits):在执行需要等待页面渲染的操作之前,使用显式等待来等待页面元素出现或特定条件满足。这样可以确保测试代码在操作页面元素之前等待页面完全加载和渲染完成。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId")));

3、隐式等待(Implicit Waits):在创建 WebDriver 实例时,设置一个全局的隐式等待时间,让 WebDriver 在查找元素时等待一定的时间。一般推荐使用隐式等待。

webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

4.打印信息

1.获取title

 private static void Test04() {//创建驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//获取百度页面titleString title = webDriver.getTitle();//如果获取的title等于“百度一下,你就知道”,测试通过if (title.equals("百度一下,你就知道")) {System.out.println("测试通过");} else {//否则测试不通过System.out.println("测试不通过");}}

2.获取url

private static void Test05() {//创建驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//获取百度页面urlString url = webDriver.getCurrentUrl();//如果获取的url等于“https://www.baidu.com/”,测试通过if (url.equals("https://www.baidu.com/")) {System.out.println("测试通过");} else {//否则测试不通过System.out.println("测试不通过");}}

5.浏览器的操作

1.浏览器最大化

 webDriver.manage().window().maximize();

private static void Test06() throws InterruptedException {//创建驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//浏览器最大化webDriver.manage().window().maximize();sleep(3000);//定位到换一换这个元素String expected_str=webDriver.findElement(By.cssSelector("#hotsearch-refresh-btn > span")).getText();//如果获取的url等于“https://www.baidu.com/”,测试通过if (expected_str.equals("换一换")) {System.out.println("测试通过");} else {//否则测试不通过System.out.println("测试不通过");}}

2.设计浏览器的大小

webDriver.manage().window().setSize(new Dimension(800,600));  # 设置宽度为800px,高度为600px

3.浏览器前进,后退

可以使用back()forward()方法来实现浏览器的后退和前进操作

//浏览器退后
webDriver.navigate().back;
//浏览器前进
webDriver.navigate().forward;

4.操作浏览器滚动条

//滚动到浏览器最底下
((JavascriptExecutor) webDriver).executeScript("document.documentElement.scrollTop=1000");

6.键盘事件

1.回车 sendKeys(Keys.ENTER)

private static void Test07() {//输入”蛋糕“并且按下回车WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com");webDriver.findElement(By.cssSelector("kw")).sendKeys("蛋糕");//在百度输入框按下enter键webDriver.findElement(By.cssSelector("kw")).sendKeys(Keys.ENTER);}

2.Ctrl+A、Ctrl+X(剪切)、Ctrl+V、Ctrl+C

通过SendKey()方法来实现的

 // 创建 Actions 对象Actions actions = new Actions(webDriver);
webDriver.findElement(By.cssSelector("kw")).sendKeys(Keys.CONTROL,"A");
webDriver.findElement(By.cssSelector("kw")).sendKeys(Keys.CONTROL,"X");

在 Selenium 中,perform方法用于执行之前在 Actions 对象上定义的所有操作。可以看见右击的执行效果。

7.切换窗口

在 Selenium 中,可以通过 WebDriver 的getWindowHandles()方法来获取当前会话中所有窗口的句柄,并通过switchTo().window()方法来切换到指定的窗口。

public class WindowHandleExample {public static void main(String[] args) {// 设置 Chrome 驱动程序路径System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");// 实例化 ChromeDriver 对象WebDriver driver = new ChromeDriver();// 打开第一个页面driver.get("https://www.example.com");// 记录第一个页面的窗口句柄String firstWindowHandle = driver.getWindowHandle();// 打开新的页面(这里假设打开一个新的页面)driver.get("https://www.example.com/new");// 获取所有窗口的句柄Set<String> windowHandles = driver.getWindowHandles();// 遍历窗口句柄,找到新打开的窗口for (String handle : windowHandles) {if (!handle.equals(firstWindowHandle)) {// 切换到新打开的窗口driver.switchTo().window(handle);break;}}// 现在可以在新窗口中执行操作// 切换回第一个页面driver.switchTo().window(firstWindowHandle);// 现在可以在第一个页面中执行操作// 关闭浏览器driver.quit();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器工作原理与实践--渐进式网页应用(PWA):它究竟解决了Web应用的哪些问题

在专栏开篇词中&#xff0c;我们提到过浏览器的三大进化路线&#xff1a; 第一个是应用程序Web化&#xff1b; 第二个是Web应用移动化&#xff1b; 第三个是Web操作系统化&#xff1b; 其中&#xff0c;第二个Web应用移动化是Google梦寐以求而又一直在发力的一件事&#xf…

【免费SSL】免费一年的SSL证书

一、SSL证书行业政策 目前市面上绝大多数的免费SSL证书有效期都在3个月左右&#xff0c;而不是一年。例如&#xff0c;腾讯云在2024年4月后不再提供有效期为一年的免费证书&#xff0c;改为提供有效期为3个月的免费证书。同样&#xff0c;阿里云在2023年11月后也不再提供有效期…

javaScript常见对象方法总结

1&#xff0c;object.assign() 用于合并对象的属性。它可以将一个或多个源对象的属性复制到目标对象中&#xff0c;实现属性的合并。 语法 Object.assign(target, ...sources); 1,target&#xff1a;目标对象&#xff0c;将属性复制到该对象中。 2,sources&#xff1a;一个…

51单片机学习笔记16 小型直流电机和五线四相电机控制

51单片机学习笔记16 小型直流电机和五线四相电机控制 一、电机分类二、小型直流电机控制1. 简介2. 驱动芯片ULN2003D3. 代码实现dc_motor_utils.cmain.c 三、五线四相步进电机控制1. 步进电机工作原理2. 构造3. 极性区分4. 驱动方式5. 28BYJ-48步进电机&#xff08;1&#xff0…

3D可视化技术亮相高铁站,引领智慧出行新潮流

在科技飞速发展的今天&#xff0c;我们的生活正经历着前所未有的变革。高铁站作为现代交通的重要枢纽&#xff0c;也在不断地创新和进步。 3D可视化技术通过三维立体的方式&#xff0c;将高铁站内部和外部的结构、设施、流线等以更加直观、生动的形式呈现出来。乘客们只需通过手…

Docker容器嵌入式开发:MySQL表的外键约束及其解决方法

本文内容涵盖了使用MySQL创建数据库和表、添加数据、处理字符集错误、解决外键约束问题以及使用SQL查询数据的过程。通过创建表、插入数据和调整字符集等操作&#xff0c;成功解决了数据库表中的字符集问题&#xff0c;并使用INSERT语句向各个表中添加了示例数据。同时&#xf…

MySQL - MySQL的RR隔离级别是如何基于ReadView机制实现的?

RR级别下,这个事务读取一条数据,无论读多少次,都是一个值,别的事务修改数据之后,哪怕提交了,你也是看不到人家修改的值的,这就避免了不可重复读的问题。 同时如果别的事务插入了一些新的数据,你也是读不到的,这样就可以避免幻读问题。这到底是如何实现的呢? 首先我…

《深入Linux内核架构》第1章 简洁和概述

目录 1.1 内核的任务 1.2 实现策略 1.3 内核的组成部分 ​1.3.1 进程、进程切换、调度 1.3.2 UNIX 进程 1.3.3 地址空间和特权级别 1.3.4 页表 1.3.5 物理内存的分配 1.3.6 计时 1.3.7 系统调用 1.3.8 设备驱动程序 1.3.9 网络 1.3.10 文件系统 1.3.11 模块和热插…

AIGC实战——StyleGAN(Style-Based Generative Adversarial Network)

AIGC实战——StyleGAN 0. 前言1. StyleGAN1.1 映射网络1.2 合成网络1.3 自适应实例归一化层1.4 风格混合1.5 随机变化 2. StyleGAN 生成样本3. StyleGAN23.1 权重调制与解调3.2 路径长度正则化3.3 非渐进式增长 4. StyleGAN2 生成样本小结系列链接 0. 前言 StyleGAN (Style-Ba…

安卓的认证测试

1 CTS CTS 是 Android 兼容性测试套件&#xff0c;用于验证设备是否符合 Android 平台的兼容性标准。它包含一系列测试用例&#xff0c;涵盖了设备的各个方面&#xff0c;如硬件功能、软件功能、API 的正确实现等。通过 CTS 测试&#xff0c;设备厂商可以确保其设备符合 Andro…

学习笔记:解决拖延

1 解决拖延&#xff0c;减轻压力的关键心态和方法 1.1 要点梳理 拖延是因为自己一直在逃避&#xff0c;重点是要有效突破逃避圈&#xff0c;进入学习圈&#xff0c;扩展成长圈。 毒蛇曲线&#xff08;见思维导图&#xff09;中越是临近截止期限&#xff0c;拖延的焦虑越上升…

VRRP虚拟路由实验(思科)

一&#xff0c;技术简介 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种网络协议&#xff0c;用于实现路由器冗余&#xff0c;提高网络可靠性和容错能力。VRRP允许多台路由器共享一个虚拟IP地址&#xff0c;其中一台路由器被选为Master&#xff0c;负…

C++初阶:6.string类

string类 string不属于STL,早于STL出现 看文档 C非官网(建议用这个) C官网 文章目录 string类一.为什么学习string类&#xff1f;1.C语言中的字符串2. 两个面试题(暂不做讲解) 二.标准库中的string类1. string类(了解)2. string类的常用接口说明&#xff08;注意下面我只讲解…

设计模式总结-装饰者模式

模式动机 一般有两种方式可以实现给一个类或对象增加行为&#xff1a; 继承机制&#xff0c;使用继承机制是给现有类添加功能的一种有效途径&#xff0c;通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的&#xff0c;用户不能控制增…

Golang-Gin 框架写的免杀平台,内置分离、捆绑等多种BypassAV方式

Golang-Gin 框架写的免杀平台&#xff0c;内置分离、捆绑等多种BypassAV方式 Golang-Gin 框架写的免杀平台&#xff0c;内置分离、捆绑等多种BypassAV方式。 cool 时间线&#xff1a; Golang Gin 框架写的免杀平台- (2021.11.12)Golang Gin 框架写的免杀平台&#xff0c;更…

环境监测站升级选择ARM网关驱动精准数据采集

物联网技术的深入发展和环保需求的不断攀升&#xff0c;API调用网关在环境监测领域的应用正成为科技创新的重要推手。其中&#xff0c;集成了API调用功能的ARM工控机/网关&#xff0c;以其出色的计算性能、节能特性及高度稳定性&#xff0c;成功搭建起连接物理世界与数字世界的…

【教程】App打包成IPA文件类型的四种方法

摘要 本教程总结了将App应用程序打包为IPA包的四种常用方法&#xff0c;包括Apple推荐的方式、iTunes拖入方法、自动编译脚本和解压改后缀名方法。每种方法都有其特点和适用场景&#xff0c;在实际开发中可以根据需求选择合适的方式进行打包。通过本教程&#xff0c;您将了解到…

微服务(狂神)

什么是微服务&#xff1a; 微服务方案&#xff1a; 1. SpringCloud NetFlix 2. Dubbo 3. SpringCloud Alibaba 解决了什么问题&#xff1a; 1. 服务过多&#xff0c;客户端怎么访问 2. 服务过多&#xff0c;服务间怎么传值 3. 服务过多&#xff0c;如何治理 4. 服务过多…

美团一面4/9

面的时候自我感觉良好&#xff0c;复盘感觉答的一坨。。 0怎么比较两个对象 0Integer 不使用new会自动装箱&#xff0c;返回提前创建的。使用new就创建新对象。 1.Object类有什么方法 java中Object类中有哪些常用方法以及作用_java中object的方法有什么用-CSDN博客 2.hash…

基于JSP的网上订餐系统

第一章 绪论 1.1课题背景与意义 自新世纪以来&#xff0c;我国经济发生翻天覆地的变化。中国经济发展迎来空前巨大的机遇与挑战&#xff0c;世界性的发展交流在这三十年较近四十年的时间中整体性上升发展&#xff0c;东西文化的碰撞&#xff0c;不断为国民经济的发展注入新鲜…