这个 web 自动化测试框架真香 ,selenium进阶pro plus版
ccwgpt 2024-09-17 12:47 39 浏览 0 评论
在 web 自动化测试当中, selenium 架构应该是很难绕过的,很多宣称要超 selenium 的下一代 web 自动化测试框架最终都败下阵来。 不过, selenium 的 api 确实比较复杂,所以也有很多库尝试对他进行上层封装,splinter 是其中发展得最好的一个。 这篇文章,我们介绍 splinter 的简单入门,如果你觉得 selenium 已经足够好用,也可以参考 splinter 的设计,对 selenium 二次封装。
快速使用
# 导入浏览器
from splinter import Browser
# 开启 chrome 浏览器
browser = Browser("chrome")
# 访问网址
browser.visit('http://www.baidu.com')
浏览器会自动开启:
安装
- pip install splinter
- 安装浏览器驱动,驱动和浏览器型号版本要对应。
驱动下载步骤:
- 打开下载地址:https://npm.taobao.org/mirrors/chromedriver
- 选择驱动版本。 比如使用的是 chrome 浏览器 v78, 则对应可以下载 78 版本的驱动
- 解压 chromedriver.exe 文件,放到环境变量中(比如 python 根目录下)。
浏览器选项
from splinter import Browser
from selenium import webdriver
# 添加浏览器选项
options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')
options.add_argument('--disable-notifications')
# 无头浏览器选项,开启之后,不会再有界面出现
browser = Browser('chrome', options=options, headless=True)
browser.visit("http://www.baidu.com")
元素查找
元素查找的方式基本上沿用了 selenium:
- id
- name
- css 选择器
- xpath
# 通过id查找
input_element = browser.find_by_id('kw')
# 通过css选择器查找
browser.find_by_css('h1')
# 通过id查找
browser.find_by_xpath('//h1')
browser.find_by_tag('h1')
browser.find_by_name('name')
browser.find_by_text('Hello World!')
browser.find_by_id('firstheader')
但是也新增了一些用得比较多的方式:
- text 文本
- href 属性
- value 属性
browser.find_by_text()
browser.find_link_by_href()
browser.find_by_value('query')
查找方式有很多,但是其实作用不大,反而造成了框架代码的紊乱,不如就直接保留 xpath 和 css 就够了。
其实元素查找有更精简的 __call__ 方式来实现,有时间再说,这里就不深入了。
等待
相比于 selenium 的等待,splinter 的友好性要好很多。你可以在初始化浏览器的时候就设置一个全局等待时间,接下来所有的元素查找都会根据这个超时时间进行元素查找:
browser = Browser('chrome', wait_time=4)
判断和匹配:
用过 selenium 的可能会对显示等待的使用方式很苦恼,实在是难用,splinter 的 matcher 机制类似于显示等待,当然,更好用一些:
# 当 h1 元素出现
#返回 True or False
browser.is_element_present_by_css('h1', wait_time=6)
虽然更加容易使用,但是这种方式还是和元素查找存在同样的问题:api 太庞杂,一看源码直接晕了。小伙伴们,你们能想到精简办法吗?:
input 元素输入
browser.visit("http://www.baidu.com")
# 通过 name 直接输入
browser.fill('wd', )
窗口管理和切换
窗口管理和切换是 splinter 最值得使用的地方,因为 selenium 管理窗口的方式非常原始,不自己封装几乎无法正常使用。
splinter 用一个专门的 Window 类来管理窗口:
# 列举所有窗口,得到 Windows 对象
browser.windows
# 通过索引获取某个 Window 对象
browser.windows[0]
# 通过窗口名称获取某个 Window 对象
browser.windows[window_name]
# 获取当前窗口
browser.windows.current
# 设置当前窗口
browser.windows.current = browser.windows[3]
# 判断某一个窗口是否是当前窗口
window.is_current
# 打开下一个窗口
window.next
# 打开上一个窗口
window.prev
splinter 对于窗口管理的实现非常有意思,对 python 魔术方法和描述符了解的同学可以去看下源码。 iframe 切换用到了上下文管理器,你只需要这样就可以完成 iframe 切换,并且每次执行完会自动退出:
with get_iframe('iframe_name') as frame:
frame.find_by_id('id_value')
总结
- splinter 相比 selenium 更加容易使用,但是由于只是在 selenium 的外面套一层壳,整个架构和流程并没有发生变化;
- splinter 的 api 管理比较庞杂,对于一些很少用到的方法, 不管就行了;
- splinter 对于浏览器的一些复杂操作做了很好的封装: windows 管理 iframe 切换 select 选择器处理 鼠标操作 尤其是表单和 input 的输入更加精简
- 缺乏对文件上传的处理
- 元素查找和管理还有待优化
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)