- 博客(136)
- 收藏
- 关注
原创 df 和 du 命令
现象:df看到磁盘还有空间,但touch新建文件报错No space left on device →。df:查看分区文件系统整体空间,读取超级块;du统计目录内文件大小,遍历文件。自测题:磁盘df显示100%,但du查看根目录找不到大文件,排查思路是什么?文件已经rm删除,但进程仍然打开该文件,文件句柄未释放,磁盘空间不会回收。现象:同一个分区,df看到的used 比 du统计出来全部文件总和更大。Q:df统计已用空间大于du统计总和是什么原因?遍历文件,速度慢,文件超多的时候会卡住。
2026-09-03 10:45:46
366
原创 外层 driver.quit() 能否关闭 Page 类内部 self.web_driver
只有一个驱动进程,没有两个浏览器关闭外层driver,Page内部驱动同步失效不会出现一边关闭、一边存活的情况。
2026-08-22 13:08:15
164
原创 运算符的优先级和结合性
not不属于算术一元运算符,优先级在比较运算符之后位运算& ^ |优先级高于> < ==这类比较运算符先看优先级:优先级不同,永远先算高优先级,不用看结合性优先级相同,才看结合性✅ 绝大部分:左结合,从左往右算**、赋值运算符,右结合,从右往左算。
2026-08-22 10:22:01
372
原创 异常捕获 + 日志封装 + PO设计思想(企业框架核心)
自动化脚本运行会遇到各种报错,不能一出错程序直接终止,需要捕获异常、打印日志、截图留存现场。
2026-08-21 22:25:01
164
原创 StaleElementReferenceException(陈旧元素引用异常)
通俗表现:代码找到了按钮,但准备点击的瞬间程序崩溃,提示元素不存在;即使采用链式写法,依然偶发/必现报错。你的场景:抖音网页登录引导按钮点击时报错。
2026-08-21 21:16:46
303
原创 多窗口切换 + JS执行 + Select下拉框
打开新标签页后,driver 默认,不会自动切换,必须手动切换句柄window_handles:获取所有窗口句柄,返回列表current_window_handle:当前所在窗口句柄。
2026-08-21 11:00:08
38
原创 浏览器配置 + 文件上传 + 截图
作用:自定义浏览器启动参数,常用场景:无头运行(无界面跑脚本,服务器执行)、禁止弹窗、忽略证书报错、禁用GPU、设置窗口大小等。
2026-08-20 19:08:22
15
原创 Selenium 基础部分复盘
/相对定位(推荐);直接子元素;绝对路径禁止在项目使用常用函数:去除首尾空格、换行,文本匹配必备属性/文本模糊包含属性开头匹配(短横线,不是下划线)下标从1开始同级后面兄弟节点text()是函数,必须写text()
2026-08-20 19:03:12
102
原创 ActionChains 鼠标&键盘高级操作
普通只能完成基础点击;:模拟连续人机交互:鼠标悬浮、右键、双击、拖拽、键盘快捷键(Ctrl+C / Ctrl+V)。核心机制:动作会存入,调用.perform()才会批量执行!⚠️ 忘记写.perform()→ 所有动作不生效,高频踩坑!
2026-08-20 18:55:01
100
原创 iframe 处理详解
忘记切换frame → 元素找不到操作完iframe,忘记切回主文档,后续外层元素全部定位失败多层iframe嵌套:需要一层一层切换进去,不要直接跳iframe是动态加载的:必须配合显式等待iframe出现,不能直接switch。
2026-08-20 18:13:39
160
原创 Selenium 显式等待
硬等待:强制卡死3秒,不管页面是否加载完成✅:循环判断元素条件,满足条件立刻放行;超过超时时间才报错。灵活高效,工作必用。
2026-08-20 14:35:00
206
原创 normalize-space() 完整讲解
不要写成 normalize-space .→ 函数必须带括号()text()只能取直接文本,存在子标签时优先用空白包含:换行、tab、多个连续空格,全部统一处理Python 原生字符串没有 normalize-space 函数!这是 XPath 专属,只能写在xpath表达式里面,不能写在python代码中。
2026-08-20 11:22:48
162
原创 XPath 完整详解
text()匹配极易受空格、换行影响 → 优先搭配下标从1开始,和Python、CSS的0下标区分开不要写绝对路径,页面改动直接报错双引号单引号混用:xpath内部用双引号,外层Python字符串用单引号,反之亦可# Python外层单引号,xpath属性双引号ele = driver.find_element(By.XPATH, '//a[text()="登录"]')动态变化属性值(随机id、随机class):不要直接全匹配,用contains()模糊匹配。
2026-08-20 10:48:33
257
原创 搭建简易本地Web服务器
此时不再是 file:// 本地文件,Selenium IDE 录制按钮就不会灰色锁定了。启动http服务后,本地文件变成标准网页地址(http协议),满足工具录制要求。Selenium IDE 限制:不能直接录制。如果文件放在E盘就输入。
2026-08-19 11:32:47
246
原创 import 与 from ... import 模块导入区别
✅优点:清晰,一眼能看出这个方法来自哪个模块;不容易发生名字冲突。❌缺点:每次写代码都要带上模块前缀。
2026-08-17 10:34:46
212
原创 Python 类属性 & 实例属性
直接调用方法修改内部元素,不会生成实例属性,全体共享数据都会变动。的变量只是函数局部变量,不属于属性,方法结束就销毁。作用:避免子类命名冲突、保护核心数据不被随意篡改;实例存在同名属性,永远优先读取自身实例属性。修改后,所有实例读取到的数据全部同步更新。property加校验,属性读写更安全。Python无强制权限,依靠命名约定,正规用法:私有属性存储原始数据,搭配。对象赋值新建变量,改共享数据找类名;全局共用写类属性,个体数据实例存;单下留给子类用,双下私有防篡改;类名.属性 = 新值。
2026-08-14 12:02:48
191
原创 Python 打包与解包
右侧是列表/元组/字符串,左侧多个变量,Python自动拆解。解包:容器里的批量数据 → 拆开还原成一个个独立数据。定义函数:单星收位置打包元组,双星收关键字打包字典;调用传参:序列前面加星拆开传,字典双星打散关键字;打包:零散多个数据 → 收拢装进容器(元组为主)把列表/元组整体打散,拆成一个个独立位置参数。规则:变量数量 = 元素总数,否则报错。:接收一堆零散的位置参数,统一打包成。将字典键值对拆开,转为独立关键字参数。放在左边,接收多个元素,存入列表。接收零散关键字参数,打包成字典。
2026-08-13 10:45:32
177
原创 split() 与 str.join() 完整详解
把列表/元组里所有元素拼接成一整个字符串。拆分看分隔符号,拼接符号写前头。只切割前N次,后面内容不再拆分。统统切割,自动忽略首尾空白。依照指定符号切割字符串,按照你写的字符精准切割。⚠️ 硬性要求:容器内。
2026-08-12 23:15:22
222
原创 区分 None 和空列表 []
本文介绍了Python中None和空列表[]的区别。None是NoneType类型,表示空对象,而[]是长度为0的列表对象。二者的类型和含义完全不同。在布尔判断中,not操作对None和空列表都会返回True。文章对比了三种判断写法,推荐使用if not input_list来同时兼容None和空列表的情况,避免单独判断时可能引发的错误。
2026-08-05 11:32:38
204
原创 Python 序列&容器总表
本文总结了Python中5种主要容器类型(字符串、列表、元组、字典、集合)的核心特性和操作方法对比表。要点包括:1)不可变类型(字符串、元组)和可变类型的区分;2)各类容器支持的基本操作(索引、切片、遍历等);3)专属方法(如字符串的split()、字典的get()等);4)易混淆点(如字符串不可变性、字典in判断键值等)。最后提供了记忆口诀帮助快速掌握各类容器的核心特征和差异。表格结构清晰,通过符号标记重点,适合作为Python容器类型的快速参考手册。
2026-08-04 17:54:08
182
原创 Python 实现 a、b 交换
这篇文章介绍了Python中交换两个变量值的多种方法,重点针对a>b时才交换的场景。主要内容包括:1) 使用临时变量的通用方法;2) Python特有的解包赋值法(推荐工作使用);3) 存在数值溢出风险的算术方法;4) 仅限整数的异或运算。特别强调了新手常见的错误写法a=b;b=a会导致值丢失的问题,并提供了完整示例和易错提醒。最后还提出了一个思考题:如何不用if判断直接让a保存较小值,b保存较大值。全文提供了清晰的代码示例和原理说明,适合Python初学者学习变量交换的正确方式。
2026-08-03 10:06:56
175
原创 接口自动化测试中 是否要做数据库断言
接口自动化中可以做数据库断言,但它不是必须的,而是一种增强验证手段。✅要做:当你需要验证“数据是否真正落地”或“接口未返回的关键字段”。❌不要滥用:避免将 API 测试变成“数据库测试”,保持测试层次清晰。📌原则API 测试优先断言响应结果;必要时辅以数据库验证,确保业务闭环。指的是:在测试一个服务(比如“订单服务”)时,不通过它的 API 接口来获取数据,而是直接连接它的数据库,用 SQL 查询去验证数据是否正确。👉 举个例子:为了验证订单是否创建成功,你不是通过获取结果,来检查数据。
2025-08-16 08:51:18
790
原创 mount命令
mount 是 Linux/Unix 系统中用于挂载存储设备到文件系统目录树的命令,通过指定设备、挂载点和选项(如文件系统类型、读写权限等),将设备内容映射到指定目录。常用操作包括挂载分区、U盘、ISO镜像和网络共享,卸载则使用 umount 命令。
2025-07-31 14:27:16
782
原创 MySQL数据库实战
本文包含四组SQL查询练习题,涉及学生管理系统和员工管理系统两大主题。第一组针对学生信息表、教师信息表、课程信息表和成绩表,包含修改学生年龄、查询学生成绩、统计平均成绩等基本操作。后三组围绕员工信息表、部门信息表和职位信息表,涵盖了员工查询(如按入职日期、部门、职位筛选)、工资统计(如平均工资、年薪计算)、部门管理(如修改部门信息)等常见业务场景。题目设计从基础到进阶,包括单表查询、多表连接、子查询、分组统计和排序等多种SQL技巧,适合练习数据库基本操作和复杂查询能力。
2025-07-19 09:07:51
141
原创 为什么选择 pytest 而不是 unittest
pytest 相比 unittest 的优势包括:1)语法更简洁,直接使用 assert;2)无需继承类,测试函数更灵活;3)强大的 Fixture 机制,优于 setUp/tearDown;4)丰富的插件生态(如覆盖率、并行测试);5)直观的参数化测试(@pytest.mark.parametrize);6)自动发现测试文件;7)更友好的错误信息;8)兼容 unittest,迁移成本低。适用场景:追求高效、可维护的测试框架。例外:若项目强依赖 unittest 或团队熟悉,可保留
2025-07-12 09:37:23
764
原创 测试覆盖标准-条件覆盖-短路求值
本文介绍了软件测试中的几种常见覆盖标准,包括语句覆盖、分支覆盖、条件覆盖和路径覆盖。重点以C风格伪代码为例,详细讲解了条件覆盖的实现方法。条件覆盖要求测试每个逻辑条件的真假取值,比分支覆盖更严格。通过设计测试用例,确保代码中每个独立条件(如A==0、B>1、C==0等)都至少出现一次true和false。文中提供了具体测试用例表格,验证了所有条件都能被覆盖到。最后比较了不同覆盖标准的优缺点,说明条件覆盖能更细粒度地检测逻辑错误,但可能无法覆盖所有执行路径。
2025-07-10 18:52:09
996
原创 C++问题:返回局部变量的地址
程序可能输出一个看似合理的值,但这只是巧合,因为内存可能还没有被覆盖。程序可能崩溃,尤其是在访问已经被释放的内存时。程序的行为可能在不同的运行环境中有所不同,例如在不同的操作系统或编译器下。
2024-10-28 12:19:38
589
原创 C++的const关键字
const关键字在 C++ 中主要用于确保数据的不可变性,提高代码的可读性和安全性。合理使用const可以帮助编译器捕获潜在的错误,并使代码更加清晰和可靠。
2024-10-26 22:31:02
570
原创 C++的for循环
for循环是C++中非常强大和灵活的控制结构,适用于多种场景。通过合理地使用初始化、条件和更新部分,可以实现各种复杂的迭代逻辑。希望这些示例和解释能帮助你更好地理解和使用for循环。
2024-10-26 10:30:17
1107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅