自动化测试--WebDriver API

1. 元素定位方法

  1. 通过 ID 定位:如果元素具有唯一的 ID 属性,可以使用 findElement(By.id("elementId")) 方法来定位元素。
  2. 通过 Name 定位:使用 findElement(By.name("elementName")) 来查找具有指定名称的元素。
  3. 通过 Class Name 定位:通过 findElement(By.className("className")) 定位具有特定类名的元素。
  4. 通过 Tag Name 定位:例如 findElement(By.tagName("input")) ,可根据元素的标签名进行定位。
  5. 通过 Link Text 定位:对于链接元素,可使用 findElement(By.linkText("链接文本")) 。
  6. 通过 Partial Link Text 定位:如果只知道链接文本的一部分,使用 findElement(By.partialLinkText("部分链接文本")) 。
  7. 通过 CSS 选择器定位:findElement(By.cssSelector("#idValue")) 或者 .className 等 CSS 选择器规则。
  8. 通过 XPath 定位:这是一种非常强大和灵活的定位方式,例如 findElement(By.xpath("//input[@id='elementId']")) 。

2. 操作测试对象

  1. 点击元素:找到元素后,使用 click() 方法进行点击操作,例如 element.click() 
  2. 输入文本:使用 sendKeys() 方法向输入框输入文本,如 element.sendKeys("输入的文本") 
  3. 提交表单:对于表单元素,可以使用 submit() 方法提交表单,例如 formElement.submit() 
  4. 获取元素文本:通过 getText() 方法获取元素的显示文本,如 element.getText() 
  5. 获取html属性:通过getAttribute()方法获取对应的属性值
  6. 获取页面标题:通过getTitle()方法
  7. 获取页面url:通过getCurrentUrl()方法

3. 添加等待 

如果在进行搜索后马上对结果进行检查,页面可能还没有加载完成,此时检查可能会误判,可以添加等待来等待页面加载完成后再检查。

sleep休眠:只需调用Thread类中的sleep方法即可:

package org.example;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.util.List;import static java.lang.Thread.sleep;public class Main {public static void main(String[] args) throws InterruptedException {test1();}public static void test1() throws InterruptedException {//启动chrome浏览器WebDriver webDriver = new ChromeDriver();//打开百度webDriver.get("https://www.baidu.com");//定位到输入框WebElement input = webDriver.findElement(By.name("wd"));input.sendKeys("自动化测试");//定位搜索按钮WebElement button = webDriver.findElement(By.id("su"));button.click();sleep(2000);//检查搜索结果List<WebElement> elements = webDriver.findElements(By.tagName("em"));for(WebElement element : elements) {if(element.getText().equals("自动化测试")) {System.out.println("测试通过");}else{System.out.println("测试失败");}}}
}

 隐式等待:

package org.example;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.util.List;
import java.util.concurrent.TimeUnit;import static java.lang.Thread.sleep;public class Main {public static void main(String[] args) throws InterruptedException {test1();}public static void test1() throws InterruptedException {//启动chrome浏览器WebDriver webDriver = new ChromeDriver();//打开百度webDriver.get("https://www.baidu.com");//定位到输入框WebElement input = webDriver.findElement(By.name("wd"));input.sendKeys("自动化测试");//定位搜索按钮WebElement button = webDriver.findElement(By.id("su"));button.click();//sleep(2000);//隐式等待webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//检查搜索结果List<WebElement> elements = webDriver.findElements(By.tagName("em"));for(WebElement element : elements) {if(element.getText().equals("自动化测试")) {System.out.println("测试通过");}else{System.out.println("测试失败");}}}
}

通过隐式等待,会等待页面所有元素加载完成后停止等待,如果设置时间内页面没有加载完成,则会抛出异常。

显式等待:

package org.example;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;import java.util.List;
import java.util.concurrent.TimeUnit;import static java.lang.Thread.sleep;public class Main {public static void main(String[] args) throws InterruptedException {test1();}public static void test1() throws InterruptedException {//启动chrome浏览器WebDriver webDriver = new ChromeDriver();//打开百度webDriver.get("https://www.baidu.com");//定位到输入框WebElement input = webDriver.findElement(By.name("wd"));input.sendKeys("自动化测试");//定位搜索按钮WebElement button = webDriver.findElement(By.id("su"));button.click();//sleep(2000);//隐式等待//webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);WebDriverWait wait = new WebDriverWait(webDriver, 30);//判断元素是否可以点击//wait.until(ExpectedConditions.elementToBeClickable(By.tagName("em")));//判断元素值是否等于"自动化测试"wait.until(ExpectedConditions.textToBe(By.tagName("em"), "自动化测试"));//检查搜索结果List<WebElement> elements = webDriver.findElements(By.tagName("em"));for(WebElement element : elements) {if(element.getText().equals("自动化测试")) {System.out.println("测试通过");}else{System.out.println("测试失败");}}}
}

4. 浏览器操作

设置浏览器窗口大小:

    public static void test4() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");//浏览器最大化webDriver.manage().window().maximize();sleep(2000);//设置浏览器窗口大小webDriver.manage().window().setSize(new Dimension(500, 500));}

 控制浏览器前进后退页面:

    public static void test5() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");webDriver.findElement(By.id("kw")).sendKeys("软件测试");webDriver.findElement(By.id("su")).click();sleep(2000);//返回webDriver.navigate().back();sleep(2000);//前进webDriver.navigate().forward();sleep(2000);//去指定页面webDriver.navigate().to("https://www.baidu.com");}

控制浏览器滚动条:

    public static void test6() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");webDriver.findElement(By.id("kw")).sendKeys("软件测试");webDriver.findElement(By.id("su")).click();sleep(2000);//设置滚动条到最底部((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");sleep(2000);//设置滚动条到最顶端((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=0");}

5. 控制键盘鼠标

 控制键盘:

    public static void test7() {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");//点击ABCwebDriver.findElement(By.id("kw")).sendKeys("ABC");//点击回车webDriver.findElement(By.id("kw")).sendKeys(Keys.ENTER);//点击 ctrl + AwebDriver.findElement(By.id("kw")).sendKeys(Keys.CONTROL, "A");//点击 ctrl + XwebDriver.findElement(By.id("kw")).sendKeys(Keys.CONTROL, "X");}

控制鼠标移动和点击:

    public static void test8() {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");WebElement element = webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)"));//把鼠标移动到这个位置上右击,使用perform方法使点击效果能被看到Actions action = new Actions(webDriver);action.moveToElement(element).contextClick().perform();}

6. 切换窗口

当我们进行某个操作时,可能会打开一个新的页面,我们想要查找或操作这个新页面中的元素,需要先切换到这个页面,例如我们打开百度点击左上角的新闻:

就会出现一个新的页面:

我们想在这个页面进行测试就需要切换窗口:

    public static void test9() {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");//点击新闻webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();//获取当前浏览器中的所有页面的窗口句柄Set<String> handles = webDriver.getWindowHandles();String target = "";for(String s : handles) {target = s;}//把窗口句柄切换为最后一个窗口webDriver.switchTo().window(target);webDriver.findElement(By.cssSelector("#ww")).sendKeys("特朗普");webDriver.findElement(By.cssSelector("#s_btn_wr")).click();}

7. 截图

截图需要引入对应的依赖:

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>

 8. 定位嵌套页面中的元素

有的页面中可能存在另一个页面,想要定位这个页面中的元素,也需要先切换窗口:

 例如我想点击这个click

这里的click在iframe标签下,也就是内部页面中,我就需要先切换窗口再定位:

    public static void test11() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("C:\\Users\\22759\\Desktop\\spring\\AutoTest20240719\\src\\main\\resources\\page\\inner.html");//切换到framewebDriver.switchTo().frame("f1");sleep(2000);//点击clickwebDriver.findElement(By.cssSelector("body > div > div > a")).click();}

9. 定位下拉框 

有些页面中可能会存在下拉框,定位下拉框中的元素需要使用Select对象:

 

    public static void test12() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("C:\\Users\\22759\\Desktop\\spring\\AutoTest20240719\\src\\main\\resources\\page\\test04.html");//定位到select标签元素WebElement element = webDriver.findElement(By.cssSelector("#ShippingMethod"));//创建Select对象Select select = new Select(element);//通过序号选择,序号从0开始select.selectByIndex(2);sleep(3000);//通过选项value值选择select.selectByValue("9.25");}

10. 定位弹窗

有的页面会出现弹窗,需要进行点击:

 

    public static void test13() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("C:\\Users\\22759\\Desktop\\spring\\AutoTest20240719\\src\\main\\resources\\page\\test0502.html");webDriver.findElement(By.cssSelector("input")).click();//切换到弹窗,输入内容webDriver.switchTo().alert().sendKeys("Ting");sleep(2000);//点击确定webDriver.switchTo().alert().accept();//点击取消//webDriver.switchTo().alert().dismiss();}

 11. 上传文件

    public static void test14() {WebDriver webDriver = new ChromeDriver();webDriver.get("C:\\Users\\22759\\Desktop\\spring\\AutoTest20240719\\src\\main\\resources\\page\\test07.html");webDriver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);//上传文件webDriver.findElement(By.cssSelector("body > div > div > input[type=file]")).sendKeys("C:\\Users\\22759\\Desktop\\spring\\AutoTest20240719\\src\\main\\resources\\page\\test07.html");}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

哈默纳科HarmonicDrive谐波减速机的使用寿命计算

在机械传动系统中&#xff0c;减速机的应用无处不在&#xff0c;而HarmonicDrive哈默纳科谐波减速机以其独特的优势&#xff0c;如轻量、小型、传动效率高、减速范围广、精度高等特点&#xff0c;成为了众多领域的选择。然而&#xff0c;任何机械设备都有其使用寿命&#xff0c…

通信原理-思科实验三:无线局域网实验

实验三 无线局域网实验 一&#xff1a;无线局域网基础服务集 实验步骤&#xff1a; 进入物理工作区&#xff0c;导航选择 城市家园; 选择设备 AP0&#xff0c;并分别选择Laptop0、Laptop1放在APO范围外区域 修改笔记本的网卡&#xff0c;从以太网卡切换到无线网卡WPC300N 切…

java 对象模型的个人理解

文章目录 一、OOP-KCLASS 模型二、疑惑2.1 为什么还需要一个 Class对象&#xff1f;2.2 new 关键字和 Class.newInstance() 的区别&#xff1f; 一、OOP-KCLASS 模型 java 采用了field和method分离的方式&#xff0c;field组成实例 obj &#xff0c;存储在堆区&#xff0c;而m…

yarn安装electron时报错RequestError:socket hang up

安装electron时候&#xff0c;出现RequestError:socket hang up这样的错误&#xff0c;找了半天很多方式都是用旧淘宝源&#xff0c;导致根本安装不上去。 在项目的根目录下创建.npmrc文件&#xff0c;添加以下内容 # registryhttps://mirrors.huaweicloud.com/repository/np…

Umi-OCR:功能强大且易于使用的本地照片识别软件

Umi-OCR是一款开源且免费的离线OCR&#xff08;光学字符识别&#xff09;软件&#xff0c;可让您轻松从照片中提取文本。它支持多种语言&#xff0c;并具有许多其他功能使其成为照片识别任务的绝佳选择。 Umi-OCR的优势 离线操作&#xff1a; Umi-OCR无需互联网连接即可工作&…

服务器数据恢复—raid信息丢失导致RAID无法被识别的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某单位机房搬迁&#xff0c;将所有服务器和存储搬迁到新机房并重新连接线路&#xff0c;启动所有机器发现其中有一台服务器无法识别RAID&#xff0c;提示未做初始化操作。 发生故障的这台服务器安装LINUX操作系统&#xff0c;配置了NF…

Spring中使用到的设计模式及其源码分析

前言 众所周知&#xff0c;Spring框架是一个强大而灵活的开发框架。这不&#xff0c;上次的面试刚问到这些&#xff0c;没防住&#xff01;&#xff01;&#xff01;因此下来总结一下。这篇文章主要介绍Spring中使用到的设计模式&#xff0c;自己做个面试复盘&#xff0c;同时…

MySQL SQL 编程练习

目录 创建表并插入数据 查看表结构 创建触发器 创建INSERT 触发器 创建DELETE 触发器 创建更新触发器 创建存储过程 创建提取emp_new表所有员工姓名和工资的存储过程s1 创建存储过程s2&#xff0c;实现输入员工姓名后返回员工的年龄 创建一个存储过程s3&#xff0c;有2个参数&…

Navicat图形化管理工具安装教程

1、Navicat简介 Navicat 是一套快速、可靠的数据库管理工具&#xff0c;专为简化数据库的管理及降低系统管理成本而开发。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat使用直觉化的图形用户界面&#xff0c;让用户能够安全简单的方式创建、组织、访问并共用信…

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…

第1章 初识 C 语言

目录 1.1 C 语言的起源 1.2 选择 C 语言的理由 1.2.1 设计特性 1.2.2 高效性 1.2.3 可移植性 1.2.4 强大而灵活 1.2.5 面向程序员 1.2.6 缺点 1.3 C 语言的应用范围 1.4 计算机能做什么 1.5 高级计算机语言和编译器 1.6 语言标准 1.6.1 第 1 个 ANSI/ISO C 标准 …

图形/视图架构的基本概念

本文整理了图形/视图架构的基本概念 使用图形/视图架构&#xff0c;我们可以绘制复杂的由成千上万个基本图形组件组成的图形&#xff0c;并且每个图形组件是可选择、可拖放和可修改的&#xff0c;类似于矢量绘图软件的绘图功能。 图形/视图架构的组成 图形/视图架构主要由 …

数据结构之队列详解

1.队列的概念以及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFo(Frist in Frist out)的特性 入队列&#xff1a;进行插入才操作的一端称为队尾 出队列&#xff1a;进行删除操作的一…

智能编程,一触即发:使用AIGC优化CSS——提升前端开发效率与质量

文章目录 一、AIGC在CSS优化中的应用场景智能代码生成自动布局调整性能优化建议样式和色彩建议 二、使用AIGC优化CSS的具体步骤明确需求选择AIGC工具输入描述或设计稿审查和调整集成和测试 三、AIGC优化CSS的优势与挑战优势&#xff1a;挑战&#xff1a; 《CSS创意项目实践&…

从0到1:理发店预约剪发小程序开发笔记(上)

背景 理发师可以在小程序上设置自己的可预约时间&#xff0c;价格&#xff0c;自我介绍&#xff0c;顾客可以根据理发师的日程安排选择合适的时间进行预约和支付。这样可以提高预约的效率&#xff0c;减少沟通成本&#xff0c;方便双方的安排。 功能规划 首页展示&#xff1…

spine to unity-2.利用边缘框实现实时碰撞检测

主要讲spine的边缘框&#xff0c;在unity中&#xff0c;实现实时碰撞检测。其中使用的素材&#xff0c;是我为独立游戏ink制作的动画。独立游戏ink的开发日志&#xff0c;在小红薯持续更新中。spine工具包的安装&#xff0c;下载请参考spine to unity-1spine BoundingBoxFollow…

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接&#xff1a;[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机&#xff0c;得到如下页面&#xff0c;类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果&#xff0c;可以猜测php脚本命令是ping -c 4 $ip&#xff0c;暂时不知道执行的函数…

【UbuntuDebian安装Nginx】在线安装Nginx

云计算&#xff1a;腾讯云轻量服务器 操作系统&#xff1a;Ubuntu-v22 1.更新系统软件包列表 打开终端并运行以下命令来确保你的系统软件包列表是最新的&#xff1a; sudo apt update2.安装 Nginx 使用以下命令安装 Nginx&#xff1a; sudo apt install nginx3.启动 Nginx…

electron TodoList网页应用打包成linux deb、AppImage应用

这里用的是windows的wsl的ubuntu环境 electron应用打包linux应用需要linux下打包&#xff0c;这里用windows的wsl的ubuntu环境进行操作 1&#xff09;linux ubuntu安装nodejs、electron 安装nodejs&#xff1a; sudo apt update sudo apt upgrade ##快捷安装 curl -fsSL http…

MYSQL 第四次作业

任务要求&#xff1a; 具体操作&#xff1a; 新建数据库&#xff1a; mysql> CREATE DATABASE mydb15_indexstu; Query OK, 1 row affected (0.01 sec) mysql> USE mydb15_indexstu; Database changed 新建表&#xff1a; mysql> CREATE TABLE student( ->…