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

五分钟轻松掌握 Python 自动化测试 Selenium

一、Seleniumselenium 是一个老牌的测试工具和自动化工具它的用途非常多掌握这么技能绝对是值得并且如果有需要切换其他的技术大致应该是相似的也就是说从它迁移到别的工具是轻松的。二、为什么 Selenium 需要驱动器呢有些网站渲染的内容是在页面渲染之后通过 js 加载数据然后更新内容。在此之前我们拿不到页面的内容。我们可以通过浏览器驱动器来操作浏览器获取到页面的内容。再来看看 Selenium 的架构三、浏览器驱动器Selenium 在运行之前需要驱动器下面是不同浏览器的驱动器chrome 驱动器下载地址firefox 驱动器下载地址edge 驱动器下载地址safari 官方文档下载的需要注意版本不同的浏览器对应不同的, 考虑大概率会用 chrome 但是对于高于 Chrome 115 版本的 chrome 会给你一个 json 端点自己找需要的版本下载。下载后记录文件位置 例如 windows 下D:\web-driver\chrome-win64\chrome.exe, chrome 的驱动器在11.7M左右复制一份放在自己的目录下也不大。四、在 Chrome 中使用 WebDriver 进行测试selenium 核心就是要得到驱动器 driver所有的操作都是在驱动器上使用的from selenium import webdriver # 指定驱动程序的位置 driver_path C:\Users\Administrator\Desktop\chromedriver # 修改为你的驱动程序路径 driver webdriver.Chrome(executable_pathdriver_path) driver.get(http://example.com) # 打开网页 print(driver.title) # 打印页面标题 driver.quit() # 关闭浏览器这段代码也很好解释webdriver 使用 Chrome 驱动。驱动使用 get 方法获取页面内容然后打印驱动对象上页面的 title 然后驱动关闭六浏览器。3.1Chrome 驱动的参数 Opiton前面我们使用 Chrome 驱动其实 Chrome 驱动还可以传递众多参数驱动时 chrome opiton 的一些配置配置参数chrome_options.add_argument(--headless) # 无头模式 chrome_options.add_argument(--disable-gpu) # 禁用 gpu 加速 chrome_options.add_argument(--window-size1920,1080) # 指定窗口大小 chrome_options.add_argument(--disable-extensions) # 禁用扩展 chrome_options.add_argument(--no-sandbox) # 禁用沙盒 chrome_options.add_argument(--ignore-certificate-errors) # 忽略证书错误 chrome_options.add_argument(--proxy-serverhttp://proxyserver:port) # 设置代理 chrome_options.add_argument(--disable-popup-blocking) #禁用弹出窗口阻止 chrome_options.add_argument(--start-maximized) # 启动时最大化窗口 chrome_options.add_argument(--disable-notifications) # 禁用通知 chrome_options.add_argument(--disable-infobars) #禁用信息栏 chrome_options.add_argument(--user-data-dir/path/to/profile) # 指定用户数据目录 chrome_options.add_argument(--disable-restore-session-state) # 禁用崩溃恢复提示 chrome_options.add_argument(--mute-audio) # 静音音频五、页面动态内容的加载Selenium 处理动态内容是常见的需求等待 JavaScript 动态加载。如果没有等待内容加载完毕那么查找元素可能会导致错误。原因也很简单就是没有加载完成。等待也可以分为不同的层级web deriver API 级别的。Python 等待以及页面级的等待。5.1WebDriverWait等待from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化 WebDriver driver webdriver.Chrome() # 打开网页 driver.get(http://example.com) # 显式等待等待某个元素可见 element WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, dynamicElementId)) ) # 对元素执行操作 element.click()5.2driver.find_element 显示等待driver webdriver.Chrome() driver.implicitly_wait(10) # 全局等待 10 秒 driver.get(http://example.com) # 如果元素还没准备好WebDriver 将等待直到找到元素或超时 element driver.find_element(By.ID, dynamicElementId) element.click()5.3time.sleep() Python 等待不推荐import time driver webdriver.Chrome() driver.get(http://example.com) time.sleep(5) # 强制等待 5 秒 element driver.find_element(By.ID, dynamicElementId) element.click()5.4页面级等待from selenium.webdriver.support.ui import WebDriverWait # 等待页面完全加载通过检查 JavaScript 变量 WebDriverWait(driver, 10).until( lambda driver: driver.execute_script(return document.readyState) complete )有了对 selenium 的基础使用和认识我们就需要较为全面的了解 selenium 的 api 了当我们对其 api 有较为全面的了解我们很快就能入手了。六、selenium 浏览器操作driver.get(url) 打开指定的 URL。driver.quit() 关闭浏览器并结束 WebDriver 会话。driver.close() 关闭当前窗口。driver.maximize_window() 最大化浏览器窗口。driver.execute_script(script) 执行 JavaScript 脚本。七、元素定位driver.find_element(By.ID, id) 通过 ID 定位元素。driver.find_element(By.NAME, name) 通过 NAME 定位元素。driver.find_element(By.XPATH, xpath) 通过 XPath 定位元素。driver.find_element(By.CSS_SELECTOR, selector) 通过 CSS 选择器定位元素。driver.find_elements(By.CLASS_NAME, class_name) 定位所有符合类名的元素返回列表。八、元素操作element.click() 点击元素。element.send_keys(keys) 向元素输入文本。element.clear() 清空输入框的内容。element.get_attribute(attribute) 获取元素的属性值。element.get_text() 获取元素的文本内容。element.is_displayed() 检查元素是否显示。九、等待操作driver.implicitly_wait(time) 设置全局隐式等待时间。WebDriverWait(driver, time).until(condition) 显式等待指定的条件。十、窗口与导航driver.back() 导航到前一个页面。driver.forward() 导航到下一个页面。driver.refresh() 刷新当前页面。driver.switch_to.frame(frame) 切换到指定的 iframe。driver.switch_to.alert() 切换到 alert 对话框。driver.switch_to.window(window_name) 切换到指定的窗口十一、常用功能11.1处理 Cookiecookies driver.get_cookies() driver.add_cookie({name: cookie_name, value: cookie_value}) driver.delete_all_cookies()11.2截图driver.save_screenshot(screenshot.png)11.3上传图片file_input driver.find_element(By.NAME, file_upload) file_input.send_keys(/path/to/file.txt)11.4执行 JS# 执行 js 脚本 driver.execute_script(alert(Hello, World!);) # 从 localstorage 中获取 token token driver.execute_script(return localStorage.getItem(auth_token);) print(fToken: {token}) # 获取元素 css 属性 element driver.find_element(By.ID, element_id) background_color driver.execute_script(return window.getComputedStyle(arguments[0]).backgroundColor;, element)十二、Selenium 与 XPATH虽然页面里面使用 css 选择器更加靠近 web 端但是 xpath 在查找元素和定位时更加直接简单高效。前面已经介绍 api 了下面是一个实例from selenium import webdriver from selenium.webdriver.common.by import By driver webdriver.Chrome() driver.get(https://example.com) # 使用 XPath 查找元素 element driver.find_element(By.XPATH, //div[idmain-content]//h1) print(element.text)find_element 第一个参数指定 By.XPATH, 后面传入 xpath 字符串即可。也是特别方便。如果你对 xpath 还不是很理解那么推荐我的另外一篇文章:快速上手: 三分钟搞定 Python XPath 语法十三、selenium 与爬虫得益于 selenium 能够直接访问实际页面动态加载数据爬虫也有的重要作用。它可以弥补传统爬虫工具的不足抓取由 JavaScript 渲染的内容。但要注意的是它的性能相对较低不适合大规模数据抓取。十四、小结本文主要介绍了 Selenium 相关内容主要涉及 Selenium 知识面从开始的 Python 小案例到后面的 API 全面了解以及 Selenium 的常用功能到最后的 XPATH 以及爬虫的认知。这些内容已经能够全面且具有实践性最后下方这份完整的软件测试 视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

相关文章:

五分钟轻松掌握 Python 自动化测试 Selenium

一、Selenium selenium 是一个老牌的测试工具和自动化工具,它的用途非常多,掌握这么技能绝对是值得,并且如果有需要切换其他的技术,大致应该是相似的,也就是说从它迁移到别的工具是轻松的。 二、为什么 Selenium 需要…...

用STM32F103和DS1302做个多功能电子钟:从Proteus 8.11仿真到代码烧录全流程

STM32F103与DS1302电子钟实战:从仿真到硬件的全流程解析 在嵌入式开发领域,电子时钟项目堪称"Hello World"级别的经典案例。不同于简单的LED闪烁,它融合了实时时钟芯片驱动、人机交互界面设计、多任务状态机管理等核心技术要点。本…...

02华夏之光永存:黄大年茶思屋榜文解法「第7期2题」大规模光网络多约束寻路算法·双路径解法

华夏之光永存:黄大年茶思屋榜文解法「第7期2题」 大规模光网络多约束寻路算法双路径解法(约束内最优本源降维) 一、摘要 本题为全光算力网络路由调度领域顶级技术难题,本文采用工程化可复现逻辑,提供两条标准化解题路径…...

避开VisionPro TCP通讯的那些坑:从配置到代码的完整避坑指南

VisionPro TCP通讯实战避坑指南:从配置陷阱到代码优化的全链路解决方案 第一次尝试将VisionPro的检测数据通过TCP/IP传输到外部程序时,我踩遍了所有能想到的坑——从莫名其妙的连接失败,到接收到的数据乱码,再到程序突然卡死。如果…...

告别盲目调管子!用gm/ID方法在Cadence Virtuoso里搞定模拟IC设计(附SMIC 13nm工艺库仿真脚本)

用gm/ID方法在Cadence Virtuoso中实现精准模拟IC设计 当你在SMIC 13nm工艺下设计一个运算放大器时,是否经历过这样的困境:按照教科书上的平方律公式计算出的晶体管尺寸,在实际仿真中完全达不到预期性能?或者为了满足增益和带宽要求…...

01华夏之光永存:黄大年茶思屋榜文解法「第7期1题」OXC超快速切波技术·双路径解法

华夏之光永存:黄大年茶思屋榜文解法「第7期1题」 OXC超快速切波技术双路径解法(约束内最优本源降维) 一、摘要 本题为全光传送领域世界级底层技术难题,本文采用工程化可复现逻辑,提供两条标准化解题路径,全…...

别再只用命令流了!用Workbench表格功能动态控制ANSYS流体渗透压力阈值

突破传统:用Workbench表格功能实现流体渗透压力的智能动态控制 在ANSYS仿真领域,命令流操作一直是许多工程师的"舒适区"。但当我们面对复杂的多物理场耦合问题时,仅靠静态参数设置往往难以捕捉真实工况中的非线性特性。以刹车系统仿…...

STM32LL库实战入门:从零搭建高效开发环境

1. 为什么选择STM32 LL库开发? 第一次接触STM32 LL库的开发者可能会有疑问:已经有了HAL库和标准库,为什么还要学习LL库?这个问题要从嵌入式开发的效率需求说起。我在实际项目中遇到过这样的情况:使用STM32F030芯片做电…...

构建网页内容相似度搜索引擎:gumbo-parser HTML5解析库终极指南

构建网页内容相似度搜索引擎:gumbo-parser HTML5解析库终极指南 【免费下载链接】gumbo-parser An HTML5 parsing library in pure C99 项目地址: https://gitcode.com/gh_mirrors/gum/gumbo-parser gumbo-parser是一个用纯C99编写的HTML5解析库,…...

如何用CausalNex进行结构学习:NO TEARS算法深度解析

如何用CausalNex进行结构学习:NO TEARS算法深度解析 【免费下载链接】causalnex A Python library that helps data scientists to infer causation rather than observing correlation. 项目地址: https://gitcode.com/gh_mirrors/ca/causalnex CausalNex是…...

Kaneo社区参与指南:如何成为开源项目的活跃贡献者

Kaneo社区参与指南:如何成为开源项目的活跃贡献者 【免费下载链接】app 🎯 All you need. Nothing you dont. Open source project management that works for you, not against you. 项目地址: https://gitcode.com/gh_mirrors/app116/app Kaneo…...

题解:洛谷 P1062 [NOIP 2006 普及组] 数列

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

TC397以太网开发实战:从零配置GETH模块到RGMII引脚调试全流程

TC397以太网开发实战:从零配置GETH模块到RGMII引脚调试全流程 1. 开发环境搭建与硬件准备 在开始TC397的以太网功能开发前,需要做好以下准备工作: 硬件清单: KIT-A2G-TC397-5V-TFT开发板RTL8211F PHY芯片评估板(或兼容…...

从信息论到代码:手把手教你用MATLAB验证哈夫曼编码的‘最优性’(含效率计算)

从信息论到代码:手把手教你用MATLAB验证哈夫曼编码的‘最优性’(含效率计算) 在数据压缩的世界里,哈夫曼编码就像一位精明的会计师,总是能找到最经济的数字表达方式。我第一次接触这个概念时,被它那种"…...

动态数据源类型转换终极指南:轻松实现多数据源无缝切换

动态数据源类型转换终极指南:轻松实现多数据源无缝切换 【免费下载链接】dynamic-datasource dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasource dyna…...

STM32F103+全彩LED屏+音频频谱+智能闹钟:一个DIY多媒体终端的软硬件融合实践

1. 项目背景与核心功能 这个DIY项目的核心目标是将STM32F103微控制器、全彩LED显示屏、音频频谱分析和智能闹钟功能融合在一起,打造一个既实用又炫酷的多媒体终端。我自己在开发过程中发现,这种综合性项目特别适合想要提升嵌入式开发实战能力的朋友&…...

大模型赛道香?转行工程师掏心窝子告诉你4个血泪真相!避坑指南

本文是一位成功转行大模型算法工程师的分享,揭示了大模型赛道的机遇与挑战。文章分析了数据、平台、应用、部署四大方向,强调数据敏感度和工程能力的重要性,并指出SFT/RLHF并非适合所有人的路径。同时,提供了入行建议和不同学历背…...

Symfony Polyfill PHP73 性能优化:hrtime高精度时间函数的底层实现

Symfony Polyfill PHP73 性能优化:hrtime高精度时间函数的底层实现 【免费下载链接】polyfill-php73 This component provides functions unavailable in releases prior to PHP 7.3. 项目地址: https://gitcode.com/gh_mirrors/po/polyfill-php73 Symfony P…...

国民技术N32G455VE开发实战:JLink_V644g添加芯片全流程(附资源包)

国民技术N32G455VE开发实战:JLink_V644g环境下的芯片支持全流程解析 在嵌入式开发领域,快速搭建开发环境并实现芯片的调试支持是项目推进的关键第一步。对于采用国民技术N32G455VE这款高性能MCU的开发者来说,如何在JLink_V644g调试器中添加对…...

Kaf:现代Kafka命令行工具终极指南 - 10个高效使用技巧

Kaf:现代Kafka命令行工具终极指南 - 10个高效使用技巧 【免费下载链接】kaf Modern CLI for Apache Kafka, written in Go. 项目地址: https://gitcode.com/gh_mirrors/ka/kaf Kaf是一款用Go语言编写的现代Apache Kafka命令行工具,它为开发者和运…...

终极ComfyUI完全指南:如何用节点式界面构建AI图像生成工作流

终极ComfyUI完全指南:如何用节点式界面构建AI图像生成工作流 【免费下载链接】ComfyUI The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI Com…...

STM32G0系列读保护功能实战:从代码实现到问题解决

1. STM32G0读保护功能入门指南 第一次接触STM32G0的读保护功能时,我也是一头雾水。这个功能就像给你的代码上了一把锁,防止别人通过调试接口读取芯片内部的内容。想象一下,你辛苦开发的算法被别人轻易复制,那感觉就像自家保险箱被…...

Linux 的 pwd 命令

Linux 的 pwd 命令详解 pwd(Print Working Directory)是 Linux 和 Unix 系统中一个基本但非常重要的命令,用于显示当前工作目录的完整路径。 基本用法 最简单的使用方式是直接在终端输入: pwd命令执行后会输出当前所在目录的绝…...

Redis 配置指南

Redis 配置指南 引言 Redis 是一款高性能的键值型数据库,广泛应用于缓存、消息队列等领域。合理配置 Redis 对于提高其性能和稳定性至关重要。本文将详细介绍 Redis 的配置方法,帮助您更好地利用 Redis。 1. Redis 配置文件 Redis 的配置文件位于安装目录下的 redis.conf…...

如何快速上手Kaf:从零开始的Kafka集群管理教程

如何快速上手Kaf:从零开始的Kafka集群管理教程 【免费下载链接】kaf Modern CLI for Apache Kafka, written in Go. 项目地址: https://gitcode.com/gh_mirrors/ka/kaf Kaf是一款用Go语言编写的现代Apache Kafka命令行工具,它提供了简洁高效的方式…...

如何快速开始使用Fibratus:10分钟搭建Windows安全监控系统

如何快速开始使用Fibratus:10分钟搭建Windows安全监控系统 【免费下载链接】fibratus Adversary tradecraft detection, protection, and hunting 项目地址: https://gitcode.com/gh_mirrors/fi/fibratus Fibratus是一款强大的Windows安全监控工具&#xff…...

从零到一:实战微调Transformer处理多标签文本分类

1. 为什么选择Transformer处理多标签分类? 我第一次接触多标签分类任务是在处理电商商品属性标注时。当时用传统机器学习方法效果总是不理想,直到尝试了Transformer架构才发现新大陆。Transformer之所以适合这类任务,核心在于它的自注意力机制…...

Fusion Pixel Font在游戏开发中的应用:像素艺术的完美伴侣

Fusion Pixel Font在游戏开发中的应用:像素艺术的完美伴侣 【免费下载链接】fusion-pixel-font 开源的泛中日韩像素字体,黑体风格 项目地址: https://gitcode.com/gh_mirrors/fu/fusion-pixel-font Fusion Pixel Font是一款开源的泛中日韩像素字体…...

OCR算法工程师面试核心:从CRNN到DBNet的实战解析与高频考点

1. CRNN模型深度解析与面试高频考点 CRNN(Convolutional Recurrent Neural Network)作为OCR领域的经典算法,几乎成为算法工程师面试的必考题。我第一次接触这个模型是在2016年,当时为了解决一个车牌识别项目中的不定长文字识别问题…...

RAGEN多环境评估:在8种不同任务中的表现分析

RAGEN多环境评估:在8种不同任务中的表现分析 【免费下载链接】RAGEN RAGEN leverages reinforcement learning to train LLM reasoning agents in interactive, stochastic environments. 项目地址: https://gitcode.com/gh_mirrors/ra/RAGEN RAGEN是一个基于…...