当前位置: 首页 > news >正文

Web自动化测试-掌握selenium工具用法,使用WebDriver测试Chrome/FireFox网页(Java

目录

 一、在Eclipse中构建Maven项目

1.全局配置Maven

2.配置JDK路径

3.创建Maven项目

4.引入selenium-java依赖

二、Chrome自动化脚本编写

1.创建一个ChromeTest类

2.测试ChromeDriver

3.下载chromedriver驱动

4.在脚本中通过System.setProperty方法指定chromedriver的地址

5.测试学习通网址登录功能

三、FireFox自动化脚本编写

1.新建一个FireFoxTest类

2.指定firefox可执行文件路径: webdriver.firefox.bin

3.下载geckodriver驱动

4.在脚本中通过System.setProperty方法指定chromedriver的地址

工具:eclipse(2016)、chrome(v.125)

依赖:selenium-java(3.141.59)

驱动:chromedriver(win64 v125)

配置环境:jdk1.8.0、  maven3.5.2

 一、在Eclipse中构建Maven项目

1.全局配置Maven

点击Windows->Preferences

注意:要先在settinfs.xml中配置阿里云镜像仓库,可参考该文章1~3步骤IDEA 使用自定义MAVEN(maven安装及IDEA配置)_idea 用自定义maven-CSDN博客

同时在installations中add maven路径

2.配置JDK路径

同样是在Preferences中,确认指向的是JDK的路径而不 是JRE的路径

3.创建Maven项目

点击File->New->Project...

勾选Create a simple...

填入组名和项目名,点击Finish

创建完项目列表如下:

4.引入selenium-java依赖

在Maven官网可以下载:Maven Repository: Search/Browse/Explore (mvnrepository.com)

搜索selenium,选择Selenium Java

选择使用度较高的版本,这里选择了4.18.1

拷贝对应的Maven依赖包

点击pom.xml粘贴进去,注意要放在<dependencies></dependencies>里面

保存后,后自动生成Maven Dependendies

二、Chrome自动化脚本编写

1.创建一个ChromeTest类

2.测试ChromeDriver

输入以下代码,点击运行

import org.openqa.selenium.chrome.ChromeDriver;public class ChromeTest {public static void main(String[] args) throws Exception{ChromeDriver driver = new ChromeDriver();}
}

若报以下错,说明Selenium Java版本过高,需要下载较低版本

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/openqa/selenium/chrome/ChromeDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:763)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)at java.net.URLClassLoader.access$100(URLClassLoader.java:73)at java.net.URLClassLoader$1.run(URLClassLoader.java:368)at java.net.URLClassLoader$1.run(URLClassLoader.java:362)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:361)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at com.test.ChromeTest.main(ChromeTest.java:9)

这里我将依赖换成了3.141.59版本

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

保存后,再次运行报错以下信息,这是正常情况,因为我们还没有设置Chrome浏览器的驱动

Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.htmlat com.google.common.base.Preconditions.checkState(Preconditions.java:847)at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:134)at org.openqa.selenium.chrome.ChromeDriverService.access$000(ChromeDriverService.java:35)at org.openqa.selenium.chrome.ChromeDriverService$Builder.findDefaultExecutable(ChromeDriverService.java:159)at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:355)at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:94)at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)at com.test.WebTest01.main(WebTest01.java:12)
3.下载chromedriver驱动

因为我的Chrome浏览器的版本是125,在以下链接可以下载对应版本

chromedriver浏览器驱动各版本下载(...113、114、115、116、117、118、119、120、121、122、123、124、125、126、127)(原创) - Z哎呀 - 博客园 (cnblogs.com)

将下载解压的chromedriver.exe复制 

粘贴到项目的resources里面

4.在脚本中通过System.setProperty方法指定chromedriver的地址
// 系统设置Chrome驱动文件的路径
System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
ChromeDriver driver = new ChromeDriver();

再次运行,此时弹出Chrome窗口,运行成功

5.测试学习通网址登录功能
public static void main(String[] args) throws Exception{// 系统设置Chrome驱动文件的路径System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");ChromeDriver driver = new ChromeDriver();//最大化浏览器窗口driver.manage().window().maximize();// 测试学习通网站String url = "https://passport2.chaoxing.com";driver.get(url);Thread.sleep(3000);// 通过F12查看对应id// 输入手机号WebElement phoneElement = driver.findElement(By.id("phone")); //手机号phoneElement.clear(); //清空文本输入框中的内容phoneElement.sendKeys("xxxxxxxxxx"); //在文本输入框中输入内容String phoneValue = phoneElement.getAttribute("value"); //获取文本框中已经输入的内容Thread.sleep(1000);// 输入密码WebElement passwordElement = driver.findElement(By.id("pwd"));passwordElement.clear();passwordElement.sendKeys("xxxxxxxxxx");String passwordValue = passwordElement.getAttribute("value");Thread.sleep(1000);//输出对应值System.out.println(phoneValue);System.out.println(passwordValue);//通过className获取自动勾选框WebElement checkElement = driver.findElement(By.className("check-input"));// 使用isSelected()方法检查复选框是否被选中  boolean isSelected = checkElement.isSelected();  // 输出结果  System.out.println("复选框是否被选中: " + isSelected); // 如单复选框没有被选中if (!isSelected) {checkElement.click(); //点击选中}Thread.sleep(3000);// 点击登录WebElement loginElement = driver.findElement(By.id("loginBtn"));loginElement.click();}

点击运行后,将会弹出网址,自动登录

三、FireFox自动化脚本编写

1.新建一个FireFoxTest类
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;public class FireFoxTest {public static void main(String[] args) throws Exception{FirefoxDriver driver = new FirefoxDriver();}
}

运行后报错以下信息,这是正常情况,原因是firefox安装在其它路径,不是默认的安装路径

Exception in thread "main" org.openqa.selenium.WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: WIN10
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-VMB9KRO', ip: '10.194.105.24', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_121'
Driver info: driver.version: FirefoxDriverat org.openqa.selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.java:100)at java.util.Optional.orElseGet(Optional.java:267)at org.openqa.selenium.firefox.FirefoxOptions.getBinary(FirefoxOptions.java:216)at org.openqa.selenium.firefox.FirefoxDriver.toExecutor(FirefoxDriver.java:187)at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:147)at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:125)at com.test.FireFoxTest.main(FireFoxTest.java:10)
2.指定firefox可执行文件路径: webdriver.firefox.bin

找到Firefox的exe执行文件,添加路径对应以下代码,再次运行

//指定firefox可执行文件路径
System.setProperty("webdriver.firefox.bin","C:\\Users\\86153\\AppData\\Local\\Mozilla Firefox\\firefox.exe");
FirefoxDriver driver = new FirefoxDriver();

再次报错以下信息,这也是因为没有配置FireFox驱动

Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.gecko.driver system property; for more information, see https://github.com/mozilla/geckodriver. The latest version can be downloaded from https://github.com/mozilla/geckodriver/releasesat com.google.common.base.Preconditions.checkState(Preconditions.java:847)at org.openqa.selenium.remote.service.DriverService.findExecutable(DriverService.java:134)at org.openqa.selenium.firefox.GeckoDriverService.access$100(GeckoDriverService.java:44)at org.openqa.selenium.firefox.GeckoDriverService$Builder.findDefaultExecutable(GeckoDriverService.java:167)at org.openqa.selenium.remote.service.DriverService$Builder.build(DriverService.java:355)at org.openqa.selenium.firefox.FirefoxDriver.toExecutor(FirefoxDriver.java:190)at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:147)at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:125)at com.test.FireFoxTest.main(FireFoxTest.java:11)
3.下载geckodriver驱动

selenium,geckodriver,firefox对应版本官网参考:

Supported platforms — Firefox Source Docs documentation (mozilla.org)

我的FireFox版本是126,下载对应0.34.0版本

进入网址:https://github.com/mozilla/geckodriver ,点击“Tags”,点击0.34.0版本的download,然后选择对应平台的压缩包下载

同理,解压复制到resources文件里

4.在脚本中通过System.setProperty方法指定chromedriver的地址
//指定firefox可执行文件路径System.setProperty("webdriver.firefox.bin","C:\\Users\\86153\\AppData\\Local\\Mozilla Firefox\\firefox.exe");
// 系统设置gecko驱动文件的路径
System.setProperty("webdriver.gecko.driver", "src/test/resources/geckodriver.exe");
FirefoxDriver driver = new FirefoxDriver();

再次运行,弹出Firefox窗户,成功!

相关文章:

Web自动化测试-掌握selenium工具用法,使用WebDriver测试Chrome/FireFox网页(Java

目录 一、在Eclipse中构建Maven项目 1.全局配置Maven 2.配置JDK路径 3.创建Maven项目 4.引入selenium-java依赖 二、Chrome自动化脚本编写 1.创建一个ChromeTest类 2.测试ChromeDriver 3.下载chromedriver驱动 4.在脚本中通过System.setProperty方法指定chromedriver的…...

maven多模块项目搭建

文章目录 创建方式创建父项目创建子模块 目录结构示例父模块模块A模块B&#xff08;并在模块B中引入模块A&#xff09; 注意事项 创建方式 创建父项目 #创建文件夹后&#xff0c;进入目录&#xff0c;执行以下命令 PS D:\demo> mvn archetype:generate #将输出很多模板&am…...

PostgreSQL的视图pg_tables

PostgreSQL的视图pg_tables pg_tables 是 PostgreSQL 中的一个系统视图&#xff0c;用于显示当前数据库中所有用户定义的表的信息。这个视图提供了关于表的名称、所属模式&#xff08;schema&#xff09;、所有者以及表类型等详细信息。 pg_tables 视图的主要列 列名类型描述…...

Stable diffusion采样器详解

在我们使用SD web UI的过程中&#xff0c;有很多采样器可以选择&#xff0c;那么什么是采样器&#xff1f;它们是如何工作的&#xff1f;它们之间有什么区别&#xff1f;你应该使用哪一个&#xff1f;这篇文章将会给你想要的答案。 什么是采样&#xff1f; Stable Diffusion模…...

为什么要进行渗透测试?

渗透测试的重要性 渗透测试是一种安全评估技术&#xff0c;旨在模拟黑客攻击&#xff0c;发现和利用系统漏洞&#xff0c;以评估企业信息系统的安全性。以下是进行渗透测试的几个主要原因&#xff1a; 1.发现潜在的漏洞和安全风险&#xff1a;渗透测试可以模拟真实的攻击行为…...

后方碰撞预警系统技术规范(简化版)

后方碰撞预警系统技术规范(简化版) 1 系统概述2 预警区域3 预警目标4 功能需求功能条件5 显示需求6 指标需求1 系统概述 后方碰撞预警系统RCW(Rear Collision Warning)是在后方车辆即将与自车发生碰撞之前,激活危险警告灯以较高频率闪烁,从而吸引后方驾驶员的注意力,避免…...

Position定位

Position定位 CSS中position属性是比较常用的元素定位方案&#xff0c;position常用的取值有static、relative、absolute、fixed、sticky、inherit。 static static属性是HTML元素的默认值&#xff0c;即没有定位&#xff0c;遵循正常的文档流对象&#xff0c;对于top、bott…...

npm install 的原理

1. 执行命令发生了什么 &#xff1f; 执行命令后&#xff0c;会将安装相关的依赖&#xff0c;依赖会存放在根目录的node_modules下&#xff0c;默认采用扁平化的方式安装&#xff0c;排序规则为&#xff1a;bin文件夹为第一个&#xff0c;然后是开头系列的文件夹&#xff0c;后…...

基于I2C协议的OLED显示(利用U82G库)

目录 一、I2C协议 1、了解I2C协议的基本原理和时序协议 基本原理 时序协议 2、掌握0.96寸OLED屏的工作原理&#xff0c;汉字点阵显示原理 OLED 工作原理 汉字点阵显示原理 3、掌握开源GUI库U82G在stm32上的移植编译方法&#xff0c;以及图形界面可视化技术。 二、具体…...

【文末附gpt升级秘笈】探索AGI之路:穿越大模型的冰与火,谱写未来技术的乐章

探索AGI之路&#xff1a;穿越大模型的冰与火&#xff0c;谱写未来技术的乐章 摘要 随着人工智能技术的飞速发展&#xff0c;大模型成为了业界关注的焦点。然而&#xff0c;大模型并非万能&#xff0c;其背后隐藏着诸多迷思与挑战。本文基于“AGI技术50人”访谈栏目的素材&…...

国内12寸先进封装厂家的一些情况

一、12寸先进封装厂家 在中国大陆&#xff0c;专注于12英寸&#xff08;300mm&#xff09;晶圆的先进封装技术的企业包括但不限于以下几家&#xff1a; 1. 长电科技&#xff08;JCET Technologies Co., Ltd.&#xff09;&#xff1a;长电科技是中国领先的半导体封装测试企业之…...

【代码随想录训练营】【Day 48】【动态规划-7】| 卡码 57, Leetcode 322, 279

【代码随想录训练营】【Day 48】【动态规划-7】| 卡码 57&#xff0c; Leetcode 322&#xff0c; 279 需强化知识点 python 的幂次计算&#xff0c; 10 ** 5&#xff0c; 10 **&#xff08;0.5&#xff09; 题目 卡码 57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; 注…...

【Qt】Qt常见的数据类型

思维导图 学习目标 一、基础类型 因为Qt是一个C的框架&#xff0c;因此C的语法和数据类型在Qt中都是被支持的&#xff0c;但是Qt中也是定义了一些属于自己的数据类型&#xff0c;不过&#xff0c;好多数据类型都是对C的数据类型进行封装&#xff0c;下面来简要介绍一下这些基…...

【源码】Spring Data JPA原理解析之事务执行原理

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…...

第十一篇——信息增量:信息压缩中的保守主义原则

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过信息中的保守主义&#xff0c;我想到了现实中人的保守主义一样&#…...

中国飞行器设计创新大赛多旋翼无人机任务飞行

源码&#xff1a;后续补充 1、启动launch文件 roslaunch robot_bringup mission.launch <launch> <!--启动mavros节点 --><include file"$(find mavros)/launch/px4.launch" /><!--启动USB摄像头节点 --><include file"$(find…...

WPF-UI布局

WPF布局元素有如下几个&#xff1a; Grid&#xff1a;网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。StackPanel&#xff1a;栈式面板。可将包含的元素在竖直或水平方向上排成一条直线&#xff0c;当移除一个元素后&#xff0c;后面的元素会自动向前移…...

武忠祥17堂课没必要全听,这几个才是精华!

作者&#xff1a;Captain 链接&#xff1a;https://www.zhihu.com/question/381665751/answer/3197724055 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 17堂课类似于习题课&#xff0c;是专题训练 17堂课省略了…...

Android 蓝牙profile的配置

在做BQB认证之前&#xff0c;我们需要确认那些profile之前&#xff0c;我们需要查看profile的配置情况 Android13版本前蓝牙profile的配置 MTK的项目代码如下 vendor\mediatek\proprietary\packages\modules\Bluetooth\android\app\res\values\config.xml 高通的项目代码如…...

Selenium时间等待_显示等待

特点&#xff1a; 针对具体元素进行时间等待 可以自定义等待时长和间隔时间 按照设定的时间&#xff0c;不断定位元素&#xff0c;定位到了直接执行下一步操作 如在设定时间内没定位到元素&#xff0c;则报错&#xff08;TimeOutException&#xff09; 显示等待概念&#x…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...