用selenium4 webdriver + java 搭建并完成第一个自动化测试脚本

自动化测试任务:

百度搜索自己的姓名。点击第一个链接(或者第二个),在新的页面上,添加断言,验证你的名字是否存在。

实验资料百度网盘下载路径:

链接: https://pan.baidu.com/s/1nVlHX_ivresul9Thg6Cvjw?pwd=2ydd 提取码: 2ydd 

1.新建一个java工程

打开eclipse,点击菜单 File -> New -> Java Project

输入项目名称,(为了区分作业,请包含自己的姓名) 

2.将selenium 包添加到编译路径

1)在项目上添加文件夹"lib"   ( 文件夹名也可以是其他的,不影响使用)

弹出窗口中指定文件夹名称

2) 将给大家下发资料中的lib文件夹下的“4_selenium-server-4..jar”复制到lib文件夹中

3)将jar包添加到编译路径

选中刚才添加的jar文件。点击右键菜单 build path -> add to build path

如下图所示。则说明selenium已经成功添加到编译路径了

3.将junit到编译路径

为了使用junit框架来编写测试脚本,我们可以把junit添加到工程中来

在工程上点击右键菜单 build path -> configure build path,..

弹出窗口上。在library选项卡下,点击“Add library

系统返回到 java build path 页面。点击【Apply and Close】

此时工程中可以看到junit4了奥

5.将浏览器驱动程序添加到工程中

selenium 并不能直接操作浏览器,它需要通过浏览器驱动程序操作浏览器。

为了便于管理,我们把浏览器驱动程序也放到项目工程中。

这里需要注意,浏览器驱动程序一定要和浏览器一致,是火狐还是edge浏览器,版本是多少,都要弄清楚。

例如,

edge浏览器在网址中输入:edge://version/ 可以查看edge浏览器的版本号

火狐浏览器在网址中输入:about:support 可以查看浏览器版本

本次以火狐浏览器为例说明

新建文件夹“firefoxdriver”

然后把我给大家的firefoxdriver下的“geckodriver-v0.34.0-win32.exe”复制,粘贴该文件夹下

如下所示,火狐浏览器的驱动程序已经放到工程中了,后面我们就可以使用该驱动程序了

4.创建测试文件

在工程src目录上点击右键 New - > class ,添加一个java文件

输入测试类的名称(请大家包含自己的姓名,后面作业提交截图会用到)

5.编写第一个测试用例

1)输入如下图中的矩形框内的代码

2)导包

此时,@Test注解飘红,这是因为还没有将其添加到编译路径上

下面我们来导包。光标悬停在飘红的Test上时,系统会给出若干个快速解决方案。如下所示,选择导入 oig.junit 

导入后,@Test不在飘红了,说明系统已经能识别到该类了。

3) 输入脚本

大家可以复制如下脚本。

复制之前可以看一下我写脚本的过程,对大家编写脚本也有帮助

元素定位,大家可以借助开发中工具(F12可以打开)点选元素,拷贝它的xpath定位方式 和css定位方式

		  System.setProperty("webdriver.gecko.driver", "firefoxdriver\\geckodriver-v0.34.0-win32.exe"); // 设置chrome驱动程序的路径WebDriver driver = new FirefoxDriver(); //实例化浏览器driver.get("https://www.baidu.com/");   //打开百度页面driver.manage().window().maximize();    //最大化窗口driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("曹红杏");  //搜索框输入 你的名字driver.findElement(By.xpath("//*[@id=\"su\"]")).click();driver.findElement(By.xpath("//*[@id=\"1\"]/div/div[1]/div[1]/h3/a")).click();//切换窗口Object win2 = driver.getWindowHandles().toArray()[1];driver.switchTo().window((String)win2);String text = driver.findElement(By.xpath("/html/body/div[6]/div/div/div[3]/form/div[1]/h3")).getText();Assert.assertEquals("曹红杏", text);

6.运行测试用例

选中要运行的测试用例执行

由于脚本中未考虑测试程序和被测程序的同步问题。有的页面还没有加载完成。测试程序就试图定位,导致元素定位不到,junit执行会出错

7. 三种同步方式

大家可以使用任意一种同步方式,使得脚本正常运行

强制等待

Thread.sleep(n);   停顿n毫秒

sleep可能抛出异常,异常可以自己处理,即使用try..catch捕获,也可以throw抛出,交给调用者处理

隐式等待

隐式等待时间也叫全局等待时间,并设置有超时时间;

即脚本运行到此处时,在等待时间内进行轮询,直到页面元素出现方继续向下运行, 若在超时时间内仍有元素未出现,则不再等待,脚本继续往下运行。

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); 隐式等待具有全局性,对所有的元素定位都有效果

显示等待

显式等待是针对于某个特定的元素设置的等待时间, 在设置时间内,元素变得可用,则继续执行后续操作;如果等待时间后元素仍然不可用,则抛出NoSuchElementException异常。

例如:

WebDriverWait wait =new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*@id='1']/div/div[1]/h3/a")));

8.窗口切换

百度搜索时,点击第一个链接,会打开一个新的页面。如果希望到新的页面上继续操作。

则需要先切换到该页面上奥。然后才能在该页面上定位元素,进行操作。

          Object win2 = driver.getWindowHandles().toArray()[1];
          driver.switchTo().window((String)win2);

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

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

相关文章

LLM大模型中的基础数学工具—— 约束优化

Q26: 推导拉格朗日乘子法 的 KKT 条件 拉格朗日乘子法与 KKT 条件是啥? 拉格朗日乘子法是解决约束优化问题的利器。比如,想最小化函数 ,同时满足约束 ,就构造拉格朗日函数 ( 是乘子)。KKT 条件是解这类问…

net+MySQL中小民营企业安全生产管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,中小民营企业安全生产管理系统利用计算机网络实现信息化管理,使企业的中小民营企业安全生产管理发展和服务水平有显…

论文阅读:2024 arxiv AI Safety in Generative AI Large Language Models: A Survey

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Safety in Generative AI Large Language Models: A Survey 生成式人工智能大型语言模型中的人工智能安全性:一项调查 https://arxiv.org/pdf/2407.18369 https://www.doubao.com…

【MySQL数据库】表的约束

目录 1,空属性 2,默认值 3,列描述 4,zerofill 5,主键primary key 6,自增长auto_increment 7,唯一键unique 8,外键foreign key 在MySQL中,表的约束是指用于插入的…

基于javaweb的SpringBoot校园失物招领系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

多模态大语言模型arxiv论文略读(二十六)

Holistic Autonomous Driving Understanding by Bird’s-Eye-View Injected Multi-Modal Large Models ➡️ 论文标题:Holistic Autonomous Driving Understanding by Bird’s-Eye-View Injected Multi-Modal Large Models ➡️ 论文作者:Xinpeng Ding,…

“星睿O6” AI PC开发套件评测 - 部署PVE搭建All in One NAS服务器

Radxa O6平台上部署PVE搭建All in One NAS服务器 Radxa O6是一款性能卓越的单板计算机,其强劲的硬件配置和多样化的接口设计,使其成为家庭和小型企业理想的All in One服务器解决方案。值得一提的是,O6原生配备了两个5G网口,便于直…

C++ linux打包运行方案(cmake)

文章目录 背景动态库打包方案动态库转静态库动态库打到软件包中 运行 背景 使用C编写的一个小项目,需要打包成ubuntu下的可执行文件,方便分发给其他ubuntu执行,因为docker镜像方案过于臃肿,所以需要把项目的动态库都打在软件包中…

Linux内核编译(Ubuntu)

实验内容:在系统中下载统一发行版本的版本号较高的内核,编译之后运行自己编译的内核,并使用uname-r命令查看是否运行成功。 实验步骤: 1.查看实验环境和内核版本 图1 实验环境 VMware中虚拟机Ubuntu(24.04&#xff…

EdgeGPT - 新版Bing聊天功能逆向工程

本文翻译整理自:https://github.com/acheong08/EdgeGPT 文章目录 一、关于 EdgeGPT相关链接资源关键功能特性 二、安装系统要求安装命令 三、认证配置获取Cookie步骤代码中使用Cookie 四、使用方法1、命令行方式2、Python API方式使用Chatbot类使用Query辅助类 3、…

三网通电玩城平台系统结构与源码工程详解(四):子游戏集成与服务器调度机制全解

本篇将深入讲解三网通电玩城平台中子游戏接入、前后端资源组织方式、服务器调度逻辑、并发接入方案等核心内容,重点覆盖“李逵劈鱼”、“水果玛丽”、“疯狂玛丽”等热门组件,辅以完整代码框架与部署逻辑。 一、子游戏资源目录结构与加载机制 平台采用标…

1.1 AI大模型与Agent的兴起及其对企业数字化转型的推动作用

随着人工智能技术的飞速发展,AI大模型和智能代理(Agent)的兴起正成为推动企业数字化转型的重要力量。从2017年GPT-1的首次亮相到2025年GPT-4和Qwen 2.5等多模态模型的成熟,AI大模型经历了显著的技术演进;与此同时&…

位运算练习:起床困难综合征(贪心,位运算)(算法竞赛进阶指南学习笔记)

目录 前情提要起床困难综合征(贪心,位运算) 前情提要 一些基础运算操作用法看看上一篇; 起床困难综合征(贪心,位运算) 题目原文 [P2114 NOI2014] 起床困难综合症 - 洛谷 思路分析 题目很长…

PowerBi中REMOVEFILTERS怎么使用?

在 Power BI 的 DAX 中,REMOVEFILTERS() 是一个非常重要的函数,常用于取消某个字段或表的筛选上下文(Filter Context),从而让你的计算不受切片器(Slicer)、筛选器或视觉对象的限制。 ✅ 一、REM…

Vue3 实战:打造多功能旅游攻略选项卡页面

在旅游类应用开发中,为用户提供全面、直观的信息展示界面至关重要。本文将分享如何基于 Vue3 Axios 技术栈,实现一个包含攻略、游记、问答三大板块的旅游攻略选项卡页面,从样式设计到交互逻辑,带你深入了解整个开发过程。 项目背…

JavaScript性能优化实战(1):性能优化基础与性能分析工具

性能优化的重要性与业务价值 在当今竞争激烈的互联网环境中,网站和应用的性能已成为用户体验和业务成功的关键因素。研究表明,页面加载时间每增加1秒,转化率可能下降7%,而53%的用户会在页面加载时间超过3秒后放弃访问。这些数据直接揭示了性能优化对业务的巨大影响: 用户…

Unity 脚本使用(二)——UnityEngine.AI——NavMesh

描述 Singleton class 用于访问被烘培好的 NavMesh. 使用NavMesh类可以执行空间查询(spatial queries),例如路径查找和可步行性测试。此类还允许您设置特定区域类型的寻路成本,并调整寻路和避免的全局行为。 静态属性&#xff0…

Java 静态内部类面试题与高质量答案合集

本文整理了关于 Java 静态内部类(Static Nested Class)在面试中的高频问题及标准答案,帮助你理解其底层原理、内存表现以及实际应用。 1. 什么是静态内部类?和普通内部类有什么区别? 答: 静态内部类是定义…

为什么买不到一定阻抗特性曲线的磁环

为什么买不到一定阻抗特性曲线的磁环: 磁环绕不同的圈数,阻抗特性曲线不同,磁环没有类似于磁珠的特定频率和阻抗特性曲线的磁环。 磁环与磁珠的核心区别: 磁珠是一种固定频率阻抗器件,出厂时已通过材料和工艺设计确定…

【MATLAB海洋专题】历史汇总

【MATLAB海洋专题】历史汇总 目录 01:海洋专题进阶教学 02:海洋数据处理 03:海洋数据下载 04:海洋配色 05:海洋专题基础教学 06: 其他基础画图 07:python 画海图专题 08:模式相关文件制作 01…