Web自动化测试工具:Selenium3+Java详解

2023-11-01

今天我们一起来聊一聊Selenium的常用API使用,编程语言选用Java实现,如果使用Python等语言也大同小异。此外,本文在行文时默认同学们都已经具备一定的前端Html、CSS等基础。

由于本主题涉及的内容较多,加之笔者也是利用业余时间进行整理,因此不能一蹴而就,当然笔者会坚持更新完。感兴趣的可以Mark一下。

一、环境准备

1.Java+IDEA

Java+IDEA的安装与环境配置请自行百度,有很多教程说的很详细。

2.Selenium

老规矩,先给出Selenium官网,感兴趣的可以访问,当然这跟Selenium安装没多大关系。Selenium官网

如果是采用Java开发,目前早已经是Maven工程了,因此Selenium也是不需要单独安装的,只需要在Maven的pom文件中引入依赖即可。具体的依赖如下:

<!-- selenium-java -->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.59</version>
</dependency>

3.浏览器驱动安装

由于从Selenium3开始,Selenium对不同的浏览器驱动进行了规范。如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。

我们在日常工作中开发的系统主要使用谷歌浏览器进行访问,因此本文仅仅针对谷歌浏览器进行说明,其他浏览器请举一反三。

由于访问谷歌官网需要科学上网,因此我们可以访问国内的淘宝镜像下载浏览器对应版本的ChromeDriver(浏览器驱动)。

比如说我的谷歌浏览器的版本信息如下:
谷歌浏览器版本信息
因此我在镜像中找到对应的100版本的浏览器驱动:
在这里插入图片描述
选择Win32.zip下载
在这里插入图片描述
下载完解压后,将ChromeDriver.exe放置于你指定的位置处,然后将当前目录添加到Path环境变量中。
在这里插入图片描述
在这里插入图片描述

4.使用IDEA创建一个测试的Maven工程

在这里插入图片描述
在这里插入图片描述

二、Selenium元素定位

1.Selenium提供了8种元素定位方法

具体的元素定位方法和对应的Java方法如下:

定位方法 对应Java方法 含义
id findElement(By.id()) 通过元素id定位
name findElement(By.name()) 通过元素name定位
class name findElement(By.className()) 通过元素的class名称定位
tag name findElement(By.tagName()) 通过元素的标签名称定位
link text findElement(By.linkText()) 通过元素的text显示文本定位
partial link text findElement(By.partialLinkText()) 通过元素的部分text显示文本定位
xpath findElement(By.xpath()) 通过路径表达式定位
css selector findElement(By.cssSelector()) 通过CSS选择器定位

2.具体定位方法的用法示例

我们还是以访问百度首页(侵权删)为例进行讲解。
在这里插入图片描述

代码:

package com.ieslab.selenium_test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

/**
 * @Author: zongshaofeng
 * @Description: 你好,Selenium!
 * @Date:Create:in 2022/4/4 17:52
 * @Modified By:
 */
public class HelloSelenium {

    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        driver.get("http://www.baidu.com");
        // 通过id进行定位,百度搜索框input的id为kw
        driver.findElement(By.id("kw"));
        // 通过name进行定位,百度搜索框input的id为wd
        driver.findElement(By.name("wd"));
        // 通过class name进行定位,百度搜索框input的class name为s_ipt
        driver.findElement(By.className("s_ipt"));
        // 通过tag name进行定位,百度搜索框input的tag name为input
        driver.findElement(By.tagName("input"));
        // 通过xpath进行定位,xpath定位有N种写法,这里列几个常用写法:
        driver.findElement(By.xpath("//*[@id='kw']"));
        driver.findElement(By.xpath("//*[@name='wd']"));
        driver.findElement(By.xpath("//input[@class='s_ipt']"));
        driver.findElement(By.xpath("//form[@id='form']/span/input"));
        driver.findElement(By.xpath("//input[@id='kw' and @name='wd']"));
        // 通过css进行定位,css定位有N种写法,这里列几个常用写法:
        driver.findElement(By.cssSelector("#kw"));
        driver.findElement(By.cssSelector("[name=wd]"));
        driver.findElement(By.cssSelector(".s_ipt"));
        driver.findElement(By.cssSelector("form#form > span > input"));
        // 通过link text进行定位,定位新闻
        driver.findElement(By.linkText("新闻"));
        // 通过partialLink text进行定位,定位新闻
        driver.findElement(By.partialLinkText("新"));
        driver.close();
    }
}

Xpath和CSS选择器相关知识,这里建议百度学习。

三、控制浏览器操作

1.控制浏览器窗口大小

有时候我们希望浏览器以特定的窗口大小运行,Selenium提供了相应的操作API:setSize和maximize

	public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        // 设置浏览器的窗口大小为500*300,
        driver.manage().window().setSize(new Dimension(500,300));
        // 设置浏览器显示位置
        driver.manage().window().setPosition(new Point(200,300));
        // 访问百度首页
        driver.get("http://www.baidu.com");
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        // 设置浏览器最大化
        driver.manage().window().maximize();
        driver.close();
    }

2.控制浏览器前进、后退、刷新

Selenium提供模拟浏览器的前进、后退、刷新按钮功能的API,forward()、back()和refresh()方法。

	public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        // 访问百度首页
        driver.get("http://www.baidu.com");
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        // 搜索框输入Selenium
        driver.findElement(By.id("kw")).sendKeys("Selenium");
        // 点击百度一下按钮
        driver.findElement(By.id("su")).click();
        System.out.println("搜索Selenium页面的url:" + driver.getCurrentUrl());
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        driver.navigate().back();
        System.out.println("后退之后的url:"+driver.getCurrentUrl());
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        driver.navigate().forward();
        System.out.println("前进之后的url:" + driver.getCurrentUrl());
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        // 刷新页面
        driver.navigate().refresh();
        driver.close();
    }

四、Web Driver常用的方法列举

做自动化测试,成功定位到元素只是迈出了第一步,我们最终的目的是对元素进行相关的操作,比如按钮、图片等的点击,输入框的输入等等。

比较常用的方法举例:

  • clear():清除输入框的文本
  • sendKeys(“输入框内容”):设置输入框的内容
  • click():单击指定元素
  • submit():提交表单
  • getSize():返回元素的尺寸
  • getText():获取元素的文本内容
  • getAttribute():获得指定的属性名
  • isDisplayed():判断该元素是否用户可见
	public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();
        // 访问百度首页
        driver.get("http://www.baidu.com");
        // 获得输入框的尺寸大小
        Dimension dimension = driver.findElement(By.id("kw")).getSize();
        System.out.println("搜索框的宽高为:" + dimension.width + " * " + dimension.height);
        // 新闻超链接的显示文本
        System.out.println("新闻超链接的显示文本:" + driver.findElement(By.partialLinkText("新")).getText());
        // 搜索框是否用户可见
        System.out.println("搜索框是否用户可见:" + driver.findElement(By.id("kw")).isDisplayed());
        // 搜索框输入Selenium
        driver.findElement(By.id("kw")).sendKeys("Selenium");
        // 搜索框的name属性值为
        System.out.println("搜索框的name属性值为:" + driver.findElement(By.id("kw")).getAttribute("name"));
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        // 清除输入框内容
        driver.findElement(By.id("kw")).clear();
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        // 搜索框输入Selenium
        driver.findElement(By.id("kw")).sendKeys("Selenium");
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        // 点击百度一下按钮
        // driver.findElement(By.id("su")).click();
        // 模拟提交
        driver.findElement(By.id("kw")).submit();
        // 延迟3s
        TimeUnit.SECONDS.sleep(3L);
        driver.close();
    }

未完待续,时间:2022年4月4日22:00:41

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web自动化测试工具:Selenium3+Java详解 的相关文章

  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • 使用 WebDriver 单击新打开的选项卡中的链接

    有人可以在这种情况下帮助我吗 场景是 有一个网页 我仅在新选项卡中打开所有指定的链接 现在我尝试单击新打开的选项卡中的任何一个链接 在下面尝试过 但它仅单击主 第一个选项卡中的一个链接 而不是在新选项卡中 new Actions drive
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • Hydra的基本使用

    R 根据上一次进度继续破解 S 使用SSL协议连接 s 指定端口 l 指定用户名 L 指定用户名字典 文件 p 指定密码破解 P 指定密码字典 文件 e 空密码探测和指定用户密码探测 ns C 用户名可以用 分割 username pass
  • CentOS-Linux安装 XS-Tools (XenServer)

    1 在Xencenter里光驱换成xs tools iso 2 登陆SSH root ns0 cd mnt root ns0 mnt ls root ns0 mnt mkdir xs tools root ns0 mnt mount dev
  • 在解决方案中所使用 NuGet 管理软件包依赖

    使用程序包恢复功能可以在提交源代码时 不需要将代码库提交到源代码管理中 大幅减少项目的尺寸 所有NuGet程序包都存储在解决方案的Packages文件夹中 要启用程序包恢复功能 可右键单击解决方案 注意 不是右键单击项目文件 并选择 Ena
  • C++的const成员函数

    C 的const成员函数 const成员函数是什么 实例 总结 const成员函数是什么 通常我们看到的const成员函数格式类似于 int QueryBalance int iBalanceVal const 简单的说 const成员函数
  • C++学习(三四六)cygwin 交叉编译Android gdal

    官方说gdal的android版本是仍在做的一项工作 BuildingForAndroid GDALhttps trac osgeo org gdal wiki BuildingForAndroid cygwin android ndk r
  • 快速幂计算x的n次幂,递归版本、迭代版本、python实现

    递归 分治思想 二分 def myPow self x float n int gt float def quick pow x n if n 1 return x half quick pow x n 2 y half half if n
  • Android文件存储目录结构

    应用程序在运行的过程中如果需要向手机上保存数据 一般是把数据保存在SDcard中的 大部分应用是直接在SDCard的根目录下创建一个文件夹 然后把数据保存在该文件夹中 这样当该应用被卸载后 这些数据还保留在SDCard中 留下了垃圾数据 并
  • 华为OD机试 Python【最小传输时延Ⅱ】

    题目 题目描述 想象一个M N的大网格 每个格子上都有一个数字 这个数字就是这个格子转发数据的延迟时间 每个格子可以向其周围的8个方向 上 下 左 右以及四个角落 发送数据 现在 有技巧 如果连续两个格子的延迟时间相同 那么我们只算一个时间
  • SQL SERVER专题实验3 简单查询

    第1关 基本知识 第1题 A 第2题 ABC 第3题 AB 第4题 AB 第5题 ABCD 第6题 ABCD 第7题 AC 第2关 按指定列 全部列和计算表达式的查询 本关任务 用 SELECT 语句检索数据表中指定字段的数据 按要求输出目
  • 公交路线推荐

    项目从0 1出 请写出公交车路线推荐策略 逻辑框架 心法 1 产品目标 用户以最低的代价 成本完成想要做的事情 2 需求理解 给出区分不同用户群 场景的规则 定义衡量标准 将其数字化 通常是准确率和召回率 3 提出解决方案 给出针对每个用户
  • 逻辑运算符

    逻辑运算符 逻辑运算符概述 短路逻辑运算符 之间的区别 逻辑运算符概述 可以把多个条件的布尔结果放在一起运算 最终返回一个布尔结果 double length 11 5 double width 6 95 需求 长度大于等于10cm 宽度大
  • Java POI excel单元格背景色(填充)、字体颜色(对齐)、边框(颜色)、行高、列宽设置

    文章目录 1 Excel Cell单元格背景色 颜色名称对照关系 2 Excel Cell单元格背景填充样式 颜色填充对照关系 3 Excel Cell字体样式设置 对照图 4 Excel 行高 列宽设置 5 Excel单元格边框设置 边框
  • web前端复习

    web前端复习 1 文档声明与字符编码 2 HTML常用标签 1 语义 2 常用标签 水平线hr 3 特殊符号 4 div和span标签 5 列表 1 有序列表 ol li 2 无序列表 ui li 3 自定义列表 dl dt 6 图片标签
  • Gap业绩逆转,宝尊电商是如何当好“全球品牌数字商业伙伴”的?

    电商永不眠 技术 消费趋势 供应链 任何一个因素都可以引起商业格局的巨变 一些看似普通的事件落到一个品牌身上 往往会带来改变命运的巨大变化 就像今年2月 宝尊官宣已完成对Gap大中华区的收购 到现在 Gap便已在宝尊的塑造下开启焕新 北京时
  • Linux中的PATH环境变量

    关于执行文件路径的变量 PATH 我们在前面说过 Linux有两大原则 一切皆文件和沉默是金 那么这些命令是否也有对应的文件呢 事实上确实是这样 我们可以通过which 命令来验证 这个命令是用来查找某个命令的绝对路径 root local
  • 数据结构基础训练

    数据结构基础训练 数组和字符串 数组的操作 数组操作四种 读取元素 从索引从0开始 内存连续 查找元素 考虑最坏的情况 即所有元素不满足查找条件 插入元素 分顺序存储式插入和链式存储插入 链式较方便 删除元素 删除后的索引需要重新按新的元素
  • 学生管理系统(java)

    学生管理系统实现步骤 案例需求 针对目前我们的所学内容 完成一个综合案例 学生管理系统 该系统主要功能如下 添加学生 通过键盘录入学生信息 添加到集合中 删除学生 通过键盘录入要删除学生的学号 将该学生对象从集合中删除 修改学生 通过键盘录
  • 如何匹配基本正则表达式模式?条码拆分器BardecodeFiler v2.6.1.1全新发布!

    BardecodeFiler是一个随时可用的应用程序 可根据条形码值拆分和重命名TIF JPEG和PDF文档 应用程序从输入文件夹中读取文档 并在输出文件夹中创建新文档 原始文档不会被修改或删除 BardecodeFiler可以使用 reg
  • 一致性hash算法 - consistent hashing

    一致性hash算法 consistent hashing consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出 目前在 cache 系统中应用
  • Web自动化测试工具:Selenium3+Java详解

    今天我们一起来聊一聊Selenium的常用API使用 编程语言选用Java实现 如果使用Python等语言也大同小异 此外 本文在行文时默认同学们都已经具备一定的前端Html CSS等基础 由于本主题涉及的内容较多 加之笔者也是利用业余时间