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

自动化测试 — selenium + Java

什么是自动化测试

        将人为驱动的测试行为转化为机器执行的过程。

        自动化测试包括UI 自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自贡话测试产出投入比(ROI ),可以用较少的投入获得很好的收益。

selenium 

        Selenium 是 W eb  应用中基于  UI  的自动化测试框架,支持跨平台、多浏览器、多语言。

工作原理

Selenium + Java 环境搭建 

一、推荐使用 Chrome 浏览器。先查看浏览器版本:

二、因为我的版本是 127 的,所以需要去这个地方下载:下载链接

三、把压缩包解压后把 chromedriver.exe 复制到:

① Chrome 浏览器目录下:

② Java - jdk 的 bin 目录下:

四、创建 Java Maven 项目,引入 pom.xml 依赖

<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>

五、创建一个 Java 类,验证环境是否配置成功:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;public class Test {public static void main(String[] args) {ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");     // 允许所有的请求WebDriver webDriver = new ChromeDriver(options);webDriver.get("https://www.baidu.com");    // 打开百度首页}
}

Selenium 常用的 API

定位元素

findElement:css 选择

// 选中百度搜索框
WebElement element = webDriver.findElement(By.cssSelector("#kw"));

xpath 选择

// 选中百度搜索框
WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));

操作测试对象的 API

click:  点击对象
send_keys:  在对象上模拟按键输入
clear:  清除对象输入的文本内容
submit:  提交(效果和 click 一样,但是这个元素要在 form 表单中,否则会报错)
text:  用于获取元素的文本信息
    // 往搜索框输入内容element.sendKeys("奥运会");// 找到 百度一下 按钮,然后点击webDriver.findElement(By.cssSelector("#su")).click();// 清空输入框webDriver.findElement(By.cssSelector(".s_ipt")).clear(); 

添加等待

    // 硬等三秒sleep(3000);// 隐式等待,如果发现了要找的元素就停止等待,到时间了还没找到就报错webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.HOURS);  

打印信息(获取信息)

打印 title / url:

    String url = webDriver.getCurrentUrl();String title = webDriver.getTitle();if (url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")) {System.out.println("测试成功");} else {System.out.println("测试失败");}

浏览器的操作

    // 浏览器后退sleep(3000);webDriver.navigate().back();// 浏览器刷新webDriver.navigate().refresh();// 浏览器前进sleep(3000);webDriver.navigate().forward();// 将浏览器的滚动条滚到最下面sleep(3000);((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");// 把浏览器设置全屏sleep(3000);webDriver.manage().window().fullscreen();// 把浏览器设置最大化(还有 X 这些)sleep(3000);webDriver.manage().window().maximize();// 把浏览器设置成自定义大小sleep(3000);webDriver.manage().window().setSize(new Dimension(600, 1000));

操作键盘

    // control + Asleep(3000);webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");// control + Xsleep(3000);webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");// control + Vsleep(3000);webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");

操作鼠标

    // 找到图片按钮sleep(3000);WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));// 鼠标右击Actions actions = new Actions(webDriver);sleep(3000);// moveToElement 表示移动到哪个元素上,   perform 表示把点击后的效果显示出来actions.moveToElement(webElement).contextClick().perform();// 鼠标双击actions.moveToElement(webElement).doubleClick().perform();// 鼠标拖动actions.moveToElement(webElement).dragAndDrop().perform();

定位一组元素

假设一个页面上有单选框和复选框,目前只点击所有的复选框:

    // findElements 获取的是一组元素List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));for (WebElement webElement : webElements) {// 通过 getAttribute 获取元素上的 type 值是否为 checkbox,如果是就点击if (webElement.getAttribute("type").equals("checkbox")) {webElement.click();}}

有 frame 的时候:

    webDriver.switchTo().frame("f1");  // 如果没有这一行直接执行下一行是找不到的,把当前定位的主体切换了frame里。webDriver.findElement(By.cssSelector("body > div > a")).click();

相关文章:

自动化测试 — selenium + Java

什么是自动化测试 将人为驱动的测试行为转化为机器执行的过程。 自动化测试包括UI 自动化&#xff0c;接口自动化&#xff0c;单元测试自动化。按照这个金字塔模型来进行自动化测试规划&#xff0c;可以产生最佳的自贡话测试产出投入比&#xff08;ROI &#xff09;&#xff0c…...

【SpringBoot系列】接口参数的默认值与必要性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

茶余饭后(五)

真正出类拔萃的人 往往都是狠角色&#xff0c; 他们具备着一种独特的特质 那就是&#xff1a; 目标清晰 意志如铁 底线分明 同时手段又极为高明 且勤奋不屑 在处于劣势时 他们表现的极为谦逊和低调 像一只温顺无害的小羊羔 然而一旦时机成熟 他们便会毫不犹豫的展现出强…...

【网络编程详解】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &#x1f525…...

C# winform三层架构 实现增删改查( 显示数据,查询数据 显示,查询篇)

一.留言 上一篇讲解了如何去添加数据&#xff0c;那么本章节我们来做&#xff0c;添加数据后显示&#xff0c;以及咋现有的数据里&#xff0c;查询我们所需要的数据。 二.显示 首先我们看上一篇更新&#xff0c;我们在添加成功后跳转页面显示数据&#xff0c;那么跳转代码只…...

Apache Kylin 系列入门教程

Apache Kylin 是一款开源的分布式分析引擎&#xff0c;主要用于提供SQL接口及多维分析&#xff08;OLAP&#xff09;能力以支持超大规模数据集。它能在亚秒级时间内完成PB级别的数据查询。本文将带你一步步了解如何安装、配置和使用Apache Kylin来构建数据仓库&#xff0c;并执…...

如何识别并防御漏洞扫描类攻击

随着网络安全威胁的不断演变&#xff0c;漏洞扫描已成为黑客常用的手段之一&#xff0c;旨在发现目标系统中的弱点以便进行后续攻击。高防服务作为一种专业的安全防护措施&#xff0c;能够在一定程度上识别并阻止这类攻击行为。本文将深入探讨高防服务是如何识别并防御漏洞扫描…...

冷思考:低代码的AI Agent构建平台能创造价值吗?

当前AI 圈中热点讨论的产品&#xff0c;除了以ChatGPT为代表的Chatbot领域&#xff0c;以及以Character.ai 为代表的AI虚拟社交领域&#xff0c;另一个热度较高的领域就是AI Agent领域。 大模型发展到今天&#xff0c;已经基本达成了一个共识&#xff1a;错综复杂的工作任务无…...

Spring Boot如何自定义注解?

1.什么是注解 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元…...

gin框架传入的gin.context参数是池化的

1. gin.context参数不但是池化的&#xff0c;而且是指针 2. 但是gin.context又实现了context的接口。因此&#xff0c;可以当作context去使用 3. 这就会导致一个很严重的问题&#xff1a; 1. 池化导致了复用后的ctx将会将之前使用的ctx中的内容进行覆盖。 2. 实现了context接…...

AWS注册是否必须使用美元银行卡

亚马逊网络服务(AWS)作为全球领先的云计算平台,吸引了众多企业和个人用户。然而,不少人在注册AWS账户时会产生疑问:是否必须使用美元银行卡?实际上,这种说法并不准确。虽然AWS的主要结算货币是美元,但用户在注册和使用过程中有多种支付方式可供选择。我们结合九河云的分析来告…...

Spring IOC 注入的3种方式

Spring IOC 注入的3种方式 1. 构造器注入&#xff08;Constructor Injection&#xff09;2. Setter方法注入&#xff08;Setter Injection&#xff09;3. 字段注入&#xff08;Field Injection&#xff09; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路…...

无人机影像基于机器学习的遥感反演及其结果可视化,定量遥感反演结果出图,相关性分析,指标筛选,特征选择

无人机影像或者卫星遥感反演分类模型的建立&#xff0c;反演模型的可视化制图出图&#xff0c;相关性分析&#xff0c;指标筛选&#xff0c;特征选择。代码太多&#xff0c;可企鹅联系&#xff1a; 指标的相关性分析。572 特征选择&#xff0c;贡献性最大的特征。412 LAI反演&…...

Eclipse插件之Java Dependency Viewer(显示类和包的关系图)

Java Dependency Viewer 插件的作用 Eclipse插件Java Dependency Viewer是一个为Java项目提供依赖关系可视化功能的工具。 在复杂的Java项目中&#xff0c;理解和分析类与类之间、包与包之间的依赖关系是非常有用的。Java Dependency Viewer插件通过生成依赖关系图&#xff0c…...

H5小游戏出海,如何流量变现?

根据数据显示&#xff0c; 90%的轻度休闲游戏收入来自广告&#xff0c;即IAA&#xff08;In-App Advertising&#xff09;。使用这种形式进行变现的游戏类型大多以超休闲游戏为主&#xff0c;玩法简单、游戏内容轻度、风格简洁、游戏时间碎片化且即时娱乐性较高&#xff0c;收益…...

轻空间六大专利优势:引领气膜建筑新时代

在绿色建筑和科技创新的驱动下&#xff0c;轻空间不断突破传统建筑的限制&#xff0c;推出了一系列具有前瞻性和高性能的专利技术。通过这些技术&#xff0c;轻空间不仅为建筑行业注入了新动力&#xff0c;也为未来的气膜建筑设定了更高的标准。 低碳建材&#xff1a;“clearsk…...

LeetCode-day37-2940. 找到 Alice 和 Bob 可以相遇的建筑

LeetCode-day37-2940. 找到 Alice 和 Bob 可以相遇的建筑 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 给你一个下标从 0 开始的正整数数组 heights &#xff0c;其中 heights[i] 表示第 i 栋建筑的高度。 如果一个人在建筑 i &#xff0c;且存在 i &…...

unity 判断平台

原文链接 Unity中判断平台的方法 Unity提供了一些方法来判断当前运行的平台&#xff0c;其中包括了判断是否为i0S平台。以下是几种常用的方法1.Application.platform Applicaion,platom 是Unity中的一个枚举类型&#xff0c;用于表示当前运行的平台。可以通过比较 Apication,p…...

PyCharm找不到Python了咋办

Python发生了重装的&#xff0c;且新的路径和原有路径不同&#xff0c;就会出现如下的错误&#xff1a; 解决办法&#xff1a; 点开PyCharm菜单的File/Setting 然后&#xff1a; 有上图的提示&#xff0c;说明需要将原来的venv进行清空。 如此操作之后&#xff0c;原来的红色…...

BRC-100 协议

BRC-100 协议 BRC-100 是一种基于序数理论的可扩展的去中心化计算协议。 BRC-100 协议会以下面的方式定义。未来所有的 BRC-100 协议栈都应该使用类似的规范来定义。 1. 摘要 BRC-100 协议是一种基于序数理论的可扩展的去中心化计算协议。 2. 抽象 BRC-100 协议本质上描述…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

汇编常见指令

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

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...