Selenium自动化测试实战:从入门到实践

Selenium是一个强大的自动化测试工具,它允许开发者编写脚本来模拟用户在Web浏览器中的操作。在Python中,Selenium库是自动化Web测试的首选工具之一。本文将介绍如何在Python中使用Selenium进行基础操作、探索高级特性,并分享一些最佳实践。

一、安装与配置

首先,确保你的环境中已安装Python。通过pip安装Selenium库:

pip install selenium

接下来,下载与你的浏览器版本相匹配的WebDriver,并将其路径添加到系统的环境变量中,或在Python脚本中直接指定WebDriver的路径。

二、基础操作

2.1 启动浏览器

from selenium import webdriver  # 指定WebDriver路径(如果已添加到环境变量,可省略)  #driver_path = 'path/to/chromedriver'  
#driver = webdriver.Chrome(executable_path=driver_path)  
driver = webdriver.Chrome()  
# 打开网页  
driver.get('http://www.baidu.com')

2.2 页面元素定位与操作

Selenium提供了多种元素定位策略,如ID、CSS选择器、XPath等。

from selenium.webdriver.common.by import By  # 定位并操作元素  
search_box = driver.find_element(By.ID, 'search-box')  
search_box.send_keys('Selenium')  
search_button = driver.find_element(By.CSS_SELECTOR, '.search-button')  
search_button.click()

三、高级特性

3.1 显式等待

显式等待用于等待某个条件成立时继续执行,否则在达到最大等待时间时抛出异常。

from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  try:  element = WebDriverWait(driver, 10).until(  EC.presence_of_element_located((By.ID, 'myDynamicElement'))  )  
finally:  driver.quit()

3.2 隐式等待(不推荐)

隐式等待对整个driver的寿命周期内设置等待时间,但通常不推荐使用,因为它会影响性能。

3.3 页面对象模式(POM)

页面对象模式是一种设计模式,它将每个页面的测试逻辑封装在单独的对象中,有助于减少代码重复并提高测试的可维护性。

class LoginPage:  def __init__(self, driver):  self.driver = driver  self.username_field = (By.ID, 'username')  self.password_field = (By.ID, 'password')  self.login_button = (By.ID, 'login_button')  def login(self, username, password):  self.driver.find_element(*self.username_field).send_keys(username)  self.driver.find_element(*self.password_field).send_keys(password)  self.driver.find_element(*self.login_button).click()

3.4 JavaScript执行

在某些情况下,可能需要使用JavaScript来处理Selenium无法直接实现的操作。

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

四、最佳实践

以下为示例(打开百度输入python,清空输入在输入selenium,并且搜索后划到底部)
首先查看源代码获取输入框绑定的id为‘kw’,搜索按钮“百度一下”绑定的id为‘su’。
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/68d7af8937304909acf4c6411106ec77.png

# 导入webdriver模块用于浏览器控制
from selenium import webdriver
# 导入By类,用于定位页面元素
from selenium.webdriver.common.by import By
# 导入time模块用于暂停执行
import time# 判断是否作为主程序运行
if __name__ == '__main__':# 初始化Edge浏览器驱动(确保已安装并配置Edge WebDriver)browser = webdriver.Edge()try:# 打开百度主页browser.get('https://www.baidu.com')# 通过ID定位搜索框并赋值给input变量input = browser.find_element(By.ID, 'kw')# 在搜索框中输入'python'input.send_keys('python')# 暂停2秒,以便观察time.sleep(2)# 清空搜索框input.clear()# 再次在搜索框中输入'Selenium'input.send_keys('Selenium')# 通过ID定位搜索按钮并赋值给button变量button = browser.find_element(By.ID, 'su')# 点击搜索按钮button.click()# 等待数据加载完成time.sleep(10)# 执行JavaScript脚本滚动页面到底部browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 暂停5秒,以便观察页面滚动后的内容time.sleep(5)except Exception as e:# 捕获并打印执行过程中发生的任何异常print(e)finally:# 显式地关闭浏览器,通常在脚本结束时添加browser.quit()来关闭浏览器browser.quit()     

通过遵循上述最佳实践,你可以更有效地使用Selenium来编写高质量的自动化测试脚本,从而提高测试效率和软件质量。

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

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

相关文章

工厂目视化管理工具有哪些?

目视化管理工具在工厂运营中发挥着至关重要的作用,它们通过视觉手段直接、快速地传递信息,促进管理的有效性和效率。 工厂目视化管理工具是多种多样的,它们旨在通过视觉手段提升工厂的管理效率和安全性。以下是一些常见的工厂目视化管理工具&…

前端开发不得不知道的那些事

文章目录 一、技能提升篇vueuseJavaScript中文网JavaScript.infoRxJsWeb安全学习书栈网码农之家 二、UI篇iconfont:阿里巴巴矢量图标库IconPark3dicons美叶UndrawError 404摹克 三、CSS篇You-need-to-know-cssCSS TricksAnimate.cssCSS ScanCSS Filter 四、颜色篇中…

基于MT76X8平台的Mtk-openwrt-sdk配置单网口方法

一、配置. 在SDK的工程下,运行make kernel_menuconfig,如下图所示: Ralink Module --->选上“One Port Only”,如下图所示: 如果P0网口实现WAN口,就配置成W/LLLL,否则就配置成LLLL/W. 二、修改网口的…

TypeScript 简介及安装

文档 typeScript官网中文文档:https://www.tslang.cn/index.html中文文档(简洁点):https://typescript.bootcss.comMDN 概述 TypeScript 是以JavaScript为基础构建的语言。 TypeScript 是一个为 JavaScript 添加静态类型检查的编程语言。 TypeScrip…

【C/C++】VC项目 启用C++异常选项 /EHa /EHsc /EHs 有什么区别,不同编译选择的dll在一个程序中相互调用是否会引发类似崩溃的故障

VC项目 启用C异常选项 /EHa /EHsc /EHs 有什么区别,不同编译选择的dll在一个程序中相互调用是否会引发类似崩溃的故障? 在Visual C中,不同的异常处理模型通过编译器选项 /EHa、/EHsc 和 /EHs 进行控制。这些选项会影响编译器如何生成与异常处…

SD写真实战,通用写真工作流InstantID分享

在人工智能图像生成领域,Stable Diffusion以其强大的图像生成能力而备受关注。而InstantID作为Stable Diffusion的通用写真工作流,更是将写真生成推向了一个新的高度。现在,让我们一起探索InstantID的工作流,一键生成你的专属写真…

基于RK3588J电力巡检机器人系统控制嵌入式AI主板

智慧巡检 信迈提供基于Intel平台、Rockchip平台、飞腾平台的核心板、3.5寸板、Mini-ITX主板、Micro-ATX主板以及嵌入式准系统等计算机硬件。产品小体积,低功耗设计,提供丰富串口、USB、LAN、Mini-PCIe扩展接口等I/O接口,具备优秀的扩展能力和…

英伟达开始引领下一波浪潮:物理AI

这可能会是AI技术形态的一个转折点,大模型的下一个形态,不再是人和模型一轮一轮的即时问答了。 当地时间 7 月 29 日,在美国丹佛举行的第 51 届 SIGGRAPH 计算机图形学会议上,英伟达创始人、CEO 黄仁勋与 Meta 创始人、CEO 马克・扎克伯格进…

Shell教程

Shell教程 0.参考链接1.什么是.sh文件2.编写规范3.编程语法3.1变量3.2运算符3.3控制语句3.4 shell脚本传参3.5 函数3.6 脚本调试3.7 pidof命令3.8killall相关命令 0.参考链接 [1].sh文件 [2]Linux–Shell基础 [3]SHELL脚本–expr命令全解 [4]pidof [5]linux killall 、kill 、…

开放式耳机原理是什么?通过不入耳的方式,享受健康听音体验

在开放式耳机的领域又细分了骨传导和气传导两种类型的耳机, 气传导开放式耳机原理 气传导是传统的声音传递方式,它依赖于空气作为声音传播的介质。 声源输入:与普通开放式耳机相同,音频设备通过耳机线将电信号传递到耳机。 驱动…

TCP 和 UDP 之间的区别?

从 连接,可靠性,传输方式等方面: TCP 是面向连接的协议,在发送数据的时候需要先通过 TCP 的三次握手,而 UDP 是无连接的协议,可以直接传输数据TCP 通过超时重传,流量控制和拥塞控制等方法保障了…

2023年中医药市场深度剖析:政策引领,创新驱动,迈向黄金发展期!

中医药作为中国传统文化的重要组成部分,在现代医学体系中占据着独特的地位。本文基于《药融咨询》发布的《中药行业现状与未来趋势白皮书》,深入分析了中医药行业的发展现状、政策环境、市场情况、研发进展及未来发展趋势,旨在为行业内外的读…

Pycharm打开 .xlsx文件 使用系统自带的软件

问题由来 最初默认是使用自带的软件打开 同事电脑默认打开方式是pycharm,有点不好弄,希望打开方式是默认系统默认; 自己尝试修改了一下自己的.xlsx打开方式,无法解决同事问题,后删除默认,自己电脑就出现乱码…

华杉研发九学习日记18 集合 泛型

华杉研发九学习日记18 一,集合框架 1.1 集合和数组的区别 集合就是在java中用来保存多个对象的容器 集合是数组的升级版,集合中只能放置对象[object]. 数组: 在java中用来保存多个具有相同数据类型数据的容器 数组弊端: 1.数组只能保存…

http代理和socks5代理哪个更适合你的网络需求?

在选择HTTP代理和SOCKS5代理时,哪个更适合你的网络需求主要取决于你的具体使用场景和需求。以下是对两者特点及应用场景的详细分析,以帮助你做出更合适的选择: HTTP代理 特点: 协议层级:http代理工作在应用层&#x…

WebLogic:弱口令,木马反弹连接

weblogic WebLogic 是 Oracle 公司开发的应用服务器,主要用作开发、集成、部署和管理大型分布式 Web 应用、网络应用和数据库应用的 Java 应用服务器。它在历史上曾出现过多个安全漏洞,其中包括弱口令、任意文件上传、SSRF、反序列化漏洞等 常见版本&a…

CentOS通过rsync实现文件同步(daemon方式)

rsync介绍 rsync是Liunx下的远程数据同步工具,可快速同步多台服务器间的文件和目录,并可实现增量同步以减少数据的传输。 rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。 daemon 方式与 ssh 方式相比有…

Docker 搭建 Minio 容器

Docker 搭建 Minio 容器 (完整详细版) 简介: Minio 是一个基于Apache License v2.0开源协议的对象存储服务,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。 例如图片、视频、日…

【获取Jmeter中正则获取的数据】

获取参数值保存在本地 Jmeter获取参数保存本地【三步走策略】【一】正则表达式提取器【二】BeanShell 后置处理程序【三】执行看结果 Jmeter获取参数保存本地【三步走策略】 节省人工成本之获取参数值保存本地 【一】正则表达式提取器 【二】BeanShell 后置处理程序 FileWri…