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

软件测试教程 自动化测试selenium篇(二)

掌握Selenium常用的API的使用

目录

一、webdriver API

1.1元素的定位

1.2 id定位

1.3name 定位

1.4tag name 定位和class name 定位

1.5CSS 定位

1.6XPath 定位

1.7link text定位

1.8Partial link text 定位

二、操作测试对象

2.1鼠标点击与键盘输入

2.2submit 提交表单

2.3text 获取元素文本

2.4添加等待

2.4.1sleep休眠强制等待

2.4.2智能等待

2.4.2.1隐式等待

2.4.2.2显式等待

2.5打印信息

2.6获取元素对应的属性值

2.7浏览器的操作

2.7.1浏览器的前进

2.7.2浏览器的后退

2.7.3浏览器滚动条的操作

2.7.4浏览器最大化

2.8键盘事件

2.9鼠标事件

2.10定位一组元素

2.11多层框架的定位

2.12下拉框的处理

2.13alert、confirm、prompt 的处理

2.14上传文件的操作

三、补充操作

3.1关闭浏览器

3.2切换窗口

3.3截图操作


一、webdriver API

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

1.1元素的定位

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。那么一个对象也有类似的属性,我们可以通过这些属性找到这对象。(通过代码找到要操作的元素)

webdriver 提供了一系列的对象定位方法,常用的有以下几种

  • id
  • name
  • class name
  • link text
  • partial link text
  • tag name
  • xpath
  • css selector

我们可以看到,一个百度的输入框,可以用这么多种方式去定位。

1.2 id定位

id是页面元素的属性,我们最常用元素定位方式,但是不是所有的元素都有id的。如果一个元素有id属性,那么一般在整个页面是唯一的。所以我们一般可以用id来唯一的定位到这个元素
通过前端工具,例如Chrome浏览器的F12,找到了百度输入框的属性信息,如下:

<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd"
autocomplete="off">

属性 id=”kw”通过find_element_by_id("kw") 函数就可以定位到百度输入框

1.3name 定位

如果这个元素有name,并且元素的name命名在整个页面是唯一的,那么我们可以用name来定位这个元素。用上面百度输入框的例子,其中元素的属性name=”wd”通过find_element_by_name("wd")函数同样也可以定位到百度输入框

1.4tag name 定位和class name 定位

从上面的百度输入框的属性信息中,我们看到,不单单只有id 和name 两个属性, 比如class 和tag
name(标签名)
input 就是一个标签的名字,可以通过find_element_by_tag_name("input") 函数来定位。
class="s_ipt",通过find_element_by_class_name("s_ipt")函数定位百度输入框。
在这里要注意的是,不是所有的元素用 tag name或者 class name来定位元素,首先要保证该元素的这两种属性在页面上是唯一的,才能够准确的定位。

1.5CSS 定位

CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML 和XML 文档的表现。
CSS 使用选择器来为页面元素绑定属性。这些选择器可以被selenium 用作另外的定位策略。

public class Main {public static void main(String[] args) {ChromeOptions options=new ChromeOptions();//参数表示允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver=new ChromeDriver(options);//.get表示打开百度的首页webDriver.get("https://baidu.com");//定位元素:找到输入框WebElement element &

相关文章:

软件测试教程 自动化测试selenium篇(二)

掌握Selenium常用的API的使用 目录 一、webdriver API 1.1元素的定位 1.2 id定位 1.3name 定位 1.4tag name 定位和class name 定位 1.5CSS 定位 1.6XPath 定位 1.7link text定位 1.8Partial link text 定位 二、操作测试对象 2.1鼠标点击与键盘输入 2.2submit 提交…...

JavaSE入门--初始Java

文章目录 Java语言概述认识Java的main函数main函数示例运行Java程序认识注释认识标识符认识关键字 前言&#xff1a; 我从今天开始步入Java的学习&#xff0c;希望自己的博客可以带动小白学习&#xff0c;也能获得大佬的指点&#xff0c;日后能互相学习进步&#xff0c;都能如尝…...

leetcode做题笔记160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…...

数学建模Matlab之检验与相关性分析

只要做C题基本上都会用到相关性分析、一般性检验等&#xff01; 回归模型性能检验 下面讲一下回归模型的性能评估指标&#xff0c;用来衡量模型预测的准确性。下面是每个指标的简单解释以及它们的应用情境&#xff1a; 1. MAPE (平均绝对百分比误差) 描述: 衡量模型预测的相对…...

微服务网关:Spring Cloud Zuul 升级 Spring Cloud Gateway 的核心要点

1. 服务路由 1.1. Zuul 接收请求&#xff1a; 在routes路由规则中&#xff0c;根据path去匹配&#xff0c;如果匹配中&#xff0c;就使用对应的路由规则进行请求转发如果无法从routes中匹配&#xff0c;则根据path用“/”去截取第一段作为服务名进行请求转发&#xff0c;转发…...

视频讲解|含可再生能源的热电联供型微网经济运行优化(含确定性和源荷随机两部分代码)

1 主要内容 该视频为《含可再生能源的热电联供型微网经济运行优化》代码讲解内容&#xff0c;对应的资源下载链接为考虑源荷不确定性的热电联供微网优化-王锐matlab&#xff08;含视频讲解&#xff09;&#xff0c;对该程序进行了详尽的讲解&#xff0c;基本做到句句分析和讲解…...

3种等待方式,让你学会Selenium设置自动化等待测试脚本!

一、Selenium脚本为什么要设置等待方式&#xff1f;——即他的应用背景到底是什么 应用Selenium时&#xff0c;浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作&#xff0c;需设置一定的等待时间去等待元素的出现。&#xff08;简单来说&#xff0c;就是设置…...

[Spring] Spring5——AOP 简介

目录 一、AOP 简介 1、什么是 AOP 二、AOP 底层原理 1、动态代理原理 2、基于接口的 JDK 动态代理 3、基于继承的 CGLib 动态代理 三、底层原理实现—— JDK 动态代理 1、使用 Proxy 类的方法创建代理对象 2、JDK 动态代理示例 四、AOP 操作术语 1、连接点 2、切入…...

C/C++ 动态规划面试算法题

1.买卖股票的最佳时机 https://blog.csdn.net/qq_41277628/article/details/113322136 输入&#xff1a;[7,1,5,3,6,4] 输出&#xff1a;5 解释&#xff1a;在第 2 天&#xff08;股票价格 1&#xff09;的时候买入&#xff0c;在第 5 天&#xff08;股票价格 6&#xff…...

kafka伪集群部署,使用zookeeper模式

1:拉去管理kafka界面UI镜像 docker pull provectuslabs/kafka-ui2:拉去管理kafka镜像 docker pull bitnami/kafka3:docker-compose.yml version: 3.8 services:zookeeper-1:container_name: zookeeper1image: bitnami/zookeeperports:- "2181:2181"environment:- …...

Postgresql 主从复制+主从切换(流复制)

pgsql有多种主从复制方式&#xff0c;推荐的是流复制 一、前置条件 1.至少两个pgsql数据库&#xff08;可以是一台设备上的两个&#xff09; 可以参考下面的教程 pgsql编译安装&#xff1a;pgsql 编译安装&#xff08;linux&#xff09; pgsql单机多开&#xff1a;pgsql 单机…...

java获取字符串集合中每个字符并且组成一个新的集合实现

直接怼代码&#xff0c;刚好碰到了这种需求&#xff0c;也是想了可久&#xff0c;其实想想也还是挺简单的 public static void main(String[] args) { // 原始字符串集合 List<String> originalList new ArrayList<>(); originalList.add("Hello"); …...

结构型设计模式——外观模式

摘要 本文主要分析设计模式 - 结构型 - 外观(Facade)&#xff0c;它提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口&#xff0c;从而让子系统更容易使用。 一、外观模式的意图 提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口&#xff0c;从而让…...

【算法学习】-【双指针】-【快乐数】

LeetCode原题链接&#xff1a;202. 快乐数 下面是题目描述&#xff1a; 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果…...

【Java-LangChain:使用 ChatGPT API 搭建系统-6】处理输入-链式 Prompt Chaining Prompts

第六章&#xff0c;处理输入-链式 Prompt Chaining Prompts 在本章中&#xff0c;我们将学习如何通过将复杂任务拆分为一系列简单的子任务来链接多个 Prompt。 您可能会想&#xff0c;为什么要将任务拆分为多个 Prompt&#xff0c;而不是像我们在上一个视频中学习的那样&…...

从零手搓一个【消息队列】创建核心类, 数据库设计与实现

文章目录 一、创建核心类1, 交换机2, 交换机类型3, 队列4, 绑定5, 交换机转发 & 绑定规则6, 消息7, 消息属性 二、数据库设计1, 使用 SQLite2, 使用 MyBatis2.1, 创建 Interface2.2, 创建 xml 文件 三、硬盘管理 -- 数据库1, 创建 DataBaseManager 类2, init() 初始化数据库…...

14:00面试,14:06就出来了,这问的过于变态了。。。

前言 刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到5月一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资…...

url请求头信息

Accept Accept&#xff1a;请求报头域&#xff0c;用于指定客户端可接受哪些类型的信息。 Accept-Language Accept-Language&#xff1a;指定客户端可接受的语言类型。 Accept-Encoding Accept-Encoding&#xff1a;指定客户端可接受的内容编码。 Host Host&#xff1a;…...

【Oracle】Oracle系列之十六--数据库备份

文章目录 往期回顾1. 数据库备份的分类1.1 逻辑备份与物理备份&#xff08;1&#xff09;逻辑备份&#xff08;2&#xff09;物理备份&#xff08;3&#xff09;归档模式与非归档模式 1.2 完全备份/差异备份/增量备份 2. Oracle 逻辑备份2.1 EXP/IMP&#xff08;1&#xff09;E…...

uni-app:实现页面效果3

效果 代码 <template><view><!-- 风速风向检测器--><view class"content_position"><view class"content"><view class"SN"><view class"SN_title">设备1</view><view class&quo…...

ARMv8-A开发实战:DC IVAC指令详解,手把手教你正确清理数据缓存

ARMv8-A开发实战&#xff1a;DC IVAC指令深度解析与缓存一致性实战指南 在嵌入式系统开发中&#xff0c;缓存一致性问题是导致许多"幽灵bug"的罪魁祸首。当DMA控制器直接操作内存而处理器核心毫不知情&#xff0c;或者当多个核心共享同一块内存区域时&#xff0c;缓存…...

告别公网IP焦虑:用SakuraFrp免费隧道,5分钟搞定Linux服务器的SSH远程访问

5分钟实现无公网IP的Linux服务器远程访问&#xff1a;SakuraFrp实战指南 当你需要在外紧急处理家中或办公室的Linux服务器时&#xff0c;却发现没有公网IP无法远程连接&#xff0c;这种焦虑我深有体会。去年深夜的一次线上故障让我深刻认识到内网穿透工具的重要性——当时我正…...

PaddleOCR迁移学习踩坑记:从数字识别到模型过拟合,我的2万张图白训了?

PaddleOCR迁移学习实战避坑指南&#xff1a;从数字识别到模型优化的深度复盘 在OCR技术应用日益广泛的今天&#xff0c;迁移学习成为快速实现特定场景文字识别的有效手段。然而在实际操作中&#xff0c;许多开发者&#xff08;包括笔者本人&#xff09;都曾陷入"伪迁移学…...

Anno 1800模组加载器:企业级XML智能合并与高性能游戏扩展架构实现指南

Anno 1800模组加载器&#xff1a;企业级XML智能合并与高性能游戏扩展架构实现指南 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com…...

开源的精神内核:是自由协作,还是商业公司的免费劳动力?

一、溯源&#xff1a;开源精神的三重底色——自由、共享与协作要理解开源的本质&#xff0c;我们必须先回到其精神原点。开源运动自诞生之日起&#xff0c;就携带着自由、共享与协作的基因&#xff0c;这三者共同构成了其精神内核的底色&#xff0c;缺一不可。自由&#xff0c;…...

构建离线优先应用终极指南:Material Components Web 与 Service Worker 完美集成

构建离线优先应用终极指南&#xff1a;Material Components Web 与 Service Worker 完美集成 【免费下载链接】material-components-web Modular and customizable Material Design UI components for the web 项目地址: https://gitcode.com/gh_mirrors/ma/material-compone…...

ARM Fast Models MTI插件开发与性能优化实战

1. Fast Models中的Model Trace Interface架构解析在嵌入式系统仿真领域&#xff0c;ARM Fast Models提供的Model Trace Interface&#xff08;MTI&#xff09;是一套高效的仿真数据采集框架。作为一位长期从事嵌入式调试工具开发的工程师&#xff0c;我发现MTI的独特设计使其成…...

1.7.3 掌握Scala函数 - 神奇占位符

本次Scala函数实战主要聚焦于“神奇占位符”下划线&#xff08;_&#xff09;的灵活运用&#xff0c;通过三个递进的案例深入理解其简化代码的核心作用。 演示过滤列表&#xff1a;利用 filter 方法&#xff0c;对比了常规匿名函数与使用占位符的写法&#xff0c;直观展示了如何…...

【数字孪生实战案例】怎样设置数据筛选条件,精准控制电子地图飞线的呈现效果?~山海鲸可视化

在数据可视化大屏应用里&#xff0c;电子地图飞线是展示跨地域关联数据的重要载体。当飞线数据量大、维度繁杂时&#xff0c;通过配置数据条件对地图飞线做精准筛选&#xff0c;能够过滤冗余信息、聚焦核心数据&#xff0c;让地图呈现更简洁直观&#xff0c;有效提升整体可视化…...

别再只会用WinHex看十六进制了!这5个隐藏功能帮你搞定90%的数据恢复难题

WinHex高阶数据恢复实战&#xff1a;5个被低估的杀手级功能解析 在数据恢复领域&#xff0c;WinHex早已超越了简单的十六进制编辑器定位。这款由X-Ways公司开发的专业工具集成了磁盘编辑、内存分析、数据解释等多项强大功能&#xff0c;但大多数用户仅停留在基础的文件浏览和简…...