Selenium的自动化测试技巧有多少?【建议收藏】

news2024/10/6 5:58:05

Selenium是一个用于自动化Web应用程序测试的工具。它提供了一组API,允许用户与Web浏览器进行交互,来执行各种自动化测试任务。本文将从零开始,详细介绍Selenium的自动化测试技巧。

第一步:安装Selenium

首先,您需要安装Selenium WebDriver库和所需的浏览器驱动程序。您可以通过pip命令来安装Selenium:


pip install selenium 

然后,您需要下载并配置浏览器驱动程序。Selenium支持各种浏览器,如Chrome、Firefox、Safari等。您可以从相应的浏览器官方网站上下载并安装对应的驱动程序。

第二步:启动浏览器并打开网页

在编写测试脚本之前,您需要启动浏览器,并通过WebDriver创建一个浏览器实例。接下来,您可以使用WebDriver的get()方法来打开一个网页。以下是一个示例代码:


from selenium import webdriver

# 创建一个Chrome浏览器实例
driver = webdriver.Chrome()

# 打开网页
driver.get("https://www.example.com") 

第三步:定位元素

Selenium提供了一系列方法来定位网页中的元素,比如按ID、class、标签名、XPath等进行定位。您可以使用find_element()方法来查找单个元素,或者使用find_elements()方法来查找多个元素。

以下是一些常用的定位方法示例:

# 按ID定位元素
element = driver.find_element_by_id("element_id")

# 按class定位元素
element = driver.find_element_by_class_name("element_class")

# 按标签名定位元素
element = driver.find_element_by_tag_name("element_tag")

# 使用XPath定位元素
element = driver.find_element_by_xpath("//element_xpath")
 

第四步:与元素交互

定位到元素后,您可以使用元素对象的方法来与元素进行交互。以下是一些常用的元素交互方法:


# 点击元素
element.click()

# 输入文本到输入框
element.send_keys("text")

# 获取元素文本
text = element.text

# 获取元素属性值
value = element.get_attribute("attribute_name")

# 判断元素是否显示
is_displayed = element.is_displayed()
 

第五步:执行操作序列

在某些情况下,您可能需要进行一系列连续的操作。Selenium提供了ActionChains类,可以执行一系列操作,比如鼠标移动、按键操作等。

以下是一个示例代码:


from selenium.webdriver.common.action_chains import ActionChains

# 创建ActionChains对象
actions = ActionChains(driver)

# 执行操作序列
actions.move_to_element(element1).click().send_keys("text").perform()

第六步:处理弹窗和iframe

在自动化测试中,通常需要处理弹窗和iframe。Selenium提供了switch_to.alert()方法来处理弹窗,并提供了switch_to.frame()方法来切换到iframe。

以下是一个示例代码:


# 处理弹窗
alert = driver.switch_to.alert
alert.accept()  # 点击确认按钮
alert.dismiss()  # 点击取消按钮

# 切换到iframe
driver.switch_to.frame("iframe_name")
driver.switch_to.default_content()  # 切换回主文档

第七步:断言和验证

在进行自动化测试时,通常需要对测试结果进行断言和验证。Selenium提供了一些方法来进行断言和验证,比如assert和assertEqual。

以下是一个示例代码:

# 断言元素是否存在
assert driver.find_element_by_id("element_id").is_displayed()  # 判断元素是否显示

# 验证页面标题是否正确
assert "Page Title" in driver.title

# 验证页面URL是否正确
assert "https://www.example.com" in driver.current_url
 

第八步:等待元素加载

在自动化测试中,有时需要等待元素加载完成。Selenium提供了一些方法来实现元素等待,比如implicitly_wait()和WebDriverWait。

以下是一个示例代码:

# 隐式等待,最多等待10秒
driver.implicitly_wait(10)

# 显式等待,等待元素出现后执行操作
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "element_id"))
)
 

第九步:截图和日志记录

在自动化测试中,截图和日志记录对于问题排查和测试报告非常重要。Selenium提供了一些方法来实现截图和日志记录。

以下是一个示例代码:

# 截图
driver.save_screenshot("screenshot.png")

# 日志记录
import logging
driver.get_log("browser")
logging.warning("Warning message")
 

第十步:清理和退出

在测试完成后,您需要进行清理和退出操作,释放资源和关闭浏览器。

以下是一个示例代码:


# 清理操作
driver.delete_all_cookies()

# 退出操作
driver.quit()

通过这篇文章,您已经了解了从零开始的Selenium自动化测试技巧,包括安装Selenium、启动浏览器、定位元素、与元素交互、执行操作序列、处理弹窗和iframe、断言和验证、等待元素加载、截图和日志记录、清理和退出等。希望这些技巧对您的自动化测试工作有所帮助!最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

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

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

相关文章

一站式天气预报解决方案,API接口轻松接入

天气对我们的日常生活有着重要的影响,无论是出门旅行还是安排工作,都需要提前了解天气情况。WAPI平台提供了一站式天气预报解决方案,通过简单的API接口,轻松获取各类天气预报数据。 这个API接口提供了丰富的天气预报信息&#xf…

mac怎么压缩pdf文件,mac压缩pdf文件大小不改变清晰度

在数字化时代,pdf文件因其良好的兼容性和稳定性,已经成为我们日常办公和学习中不可或缺的文件格式。然而,随着文件内容的增多,pdf文件的体积也往往会变得越来越大,给文件的传输和存储带来不便。本文将为你介绍几种简单…

WACV2023论文速览域迁移Domain相关

Paper1 CellTranspose: Few-Shot Domain Adaptation for Cellular Instance Segmentation 摘要原文: Automated cellular instance segmentation is a process utilized for accelerating biological research for the past two decades, and recent advancements have produc…

vue中自定义设置多语言(包括使用vue-i18n),并且运行js脚本自动生成多语言文件

在项目中需要进行多个国家语言的切换时,可以用到下面方法其中一个 一、自定义设置多语言 方法一: 可以自己编写一个设置多语言文件 在项目新建js文件,命名为:language.js,代码如下 // language.js 文档 let languagePage {CN…

深入分析 Android BroadcastReceiver (八)

文章目录 深入分析 Android BroadcastReceiver (八)1. 系统与自定义实现1.1 系统广播机制1.1.1 系统广播的实现原理1.1.2 系统广播的源码分析 1.2 自定义广播机制1.2.1 自定义广播的实现步骤1.2.2 自定义广播的源码分析 2. 广播机制设计的初衷与优势2.1 设计初衷2.2 优势 3. 总…

(七)[重制]C++命名空间与标准模板库(STL)

​ 引言 在专栏C教程的第六篇C中的结构体与联合体中,介绍了C中的结构体和联合体,包括它们的定义、初始化、内存布局和对齐,以及作为函数参数和返回值的应用。在专栏C教程的第七篇中,我们将深入了解C中的命名空间(nam…

leetcode判断二分图

判断二分图 图的问题肯定要用到深度优先遍历或者广度优先遍历,但又不是单纯的深度优先遍历算法和广度优先遍历算法,而是需要在遍历的过程中加入与解决题目相关的逻辑。 题干中说了,这个图可能不是连通图,这个提示有什么作用呢&a…

x.java => 字节码文件x.class => 运行

使用javac.exe对.java进行编译,编译成.class字节码文件 使用java.exe启动java虚拟机执行.class字节码 JVM是一个系统进程,这个进程运行会读取.class字节码文件,一旦他抢到了CPU的执行权,就会以那个类的main方法来执行程序逻辑。

JVM专题之垃圾收集算法

标记清除算法 第一步:标记 (找出内存中需要回收的对象,并且把它们标记出来) 第二步:清除 (清除掉被标记需要回收的对象,释放出对应的内存空间) 缺点: 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需 要分配较大对象时,无法找到…

1119 胖达与盆盆奶

solution 递推&#xff1a;序列的每一位所需要计算的值都可以通过该位左右两侧的结果计算得到&#xff0c;就可以考虑所谓的“左右两侧的结果”是否能通过递推进行预处理来得到&#xff0c;以避免后续使用中的反复求解。 #include<iostream> using namespace std; cons…

Ubuntu 20版本安装Redis教程

第一步 切换到root用户&#xff0c;使用su命令&#xff0c;进行切换。 输入&#xff1a; su - 第二步 使用apt命令来搜索redis的软件包&#xff0c;输入命令&#xff1a;apt search redis 第三步 选择需要的redis版本进行安装&#xff0c;本次选择默认版本&#xff0c;redis5.…

多点mGRE over IPsecVPN 配置及NHRP的使用

一、实验目的及拓扑 1、实验思路&#xff1a;FW1为总部固定IP&#xff0c;FW2和FW3为分支动态地址&#xff0c;通过mGRE over IPsec实现&#xff0c;并加载NHR解决多点隧道目的地址问题 2、网络拓扑 二、基本配置 &#xff08;一&#xff09;配置相关接口地址&#xff0c;并…

项目实战--Spring Boot与PageHelper的集成及线程污染解决

一、PageHelper使用背景 公司要做个简单管理系统&#xff0c;要我搭建Spring BootMyBatisPageHelperRedis的项目框架然后交i给实习生来开发。这个其实很简单&#xff0c;但是遇到搭建和使用过程中PageHelper有好多小坑&#xff0c;就记录一下&#xff0c;避免再踩。 版本选择&…

短视频博主:成都柏煜文化传媒有限公司

短视频博主&#xff1a;数字时代的新星&#xff0c;创意与梦想的舞台 在移动互联网的浪潮中&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为连接亿万用户、展现生活百态的重要窗口。成都柏煜文化传媒有限公司 而在这片充满无限可能的土地上&#xff0c;短视频博主…

【Python机器学习】处理文本数据——多个单词的词袋(n元分词)

使用词袋表示的主要缺点之一就是完全舍弃了单词顺序。因此“its bad&#xff0c;not good at all”和“its good&#xff0c;not bad at all”这两个字符串的词袋表示完全相同&#xff0c;尽管它们的含义相反。幸运的是&#xff0c;使用词袋表示时有一种获取上下文的方法&#…

Fastjson首字母大小写问题

1、问题 使用Fastjson转json之后发现首字母小写。实体类如下&#xff1a; Data public class DataIdentity {private String BYDBSM;private String SNWRSSJSJ;private Integer CJFS 20; } 测试代码如下&#xff1a; public static void main(String[] args) {DataIdentit…

C# Application.DoEvents()的作用

文章目录 1、详解 Application.DoEvents()2、示例处理用户事件响应系统事件控制台输出游戏和多媒体应用与操作系统的交互 3、注意事项总结 Application.DoEvents() 是 .NET 框架中的一个方法&#xff0c;它主要用于处理消息队列中的事件。在 Windows 应用程序中&#xff0c;当一…

Node.js实现一个文章生成器

前言 本文将从零开始&#xff0c;讲解如何使用Node.js来实现一个文章生成器 node里面有很多优秀的模块&#xff0c;现在我们就借助node的fs模块来操控文本&#xff0c;来实现我们想要的效果 效果展示 体验 fs 首先我们先创建一个json文件 里面放一些内容 接下来我们书写代码…

java花店管理系统eclipse开发mysql数据库

1 绪论 1.1 系统开发目的 随着人们物质生活水平和经济水平的不断提高&#xff0c;室内绿化布置、家庭园艺装饰、礼仪鲜花等日益受到重视和青睐&#xff0c;以及送鲜花给亲朋好友来表达自己的情谊。传统的花店对于信息的管理的主要方式是基于文本、表格等纸质手工处理&#xf…

MATLAB绘图合集包(18种代码和20个绘图)资料免费分享

MATLAB绘图合集包&#xff01;18种代码和20个绘图小技巧&#xff01; 获取链接&#xff1a;https://pan.baidu.com/s/1izpymx6R3Y8JsFdx42rL0A 提取码&#xff1a;381i 包括单组箱式图、堆叠柱状图、对数坐标图、多组箱式图、二维散点图、进阶热力图、进阶柱状图、面积填充…