Python自动化测试脚本覆盖文件后内容丢失,文件空白问题求助
问题排查与解决方案
核心问题分析
你遇到的情况是:在sub#.py模块执行start_test时,url.txt能正常写入内容,但回到main.py循环后文件变空白。结合代码和场景,大概率是这几个原因:
- 路径混用转义字符导致实际写入路径异常:代码里同时用了正斜杠
/和反斜杠\拼接路径,Python中反斜杠是转义字符,容易出现路径解析错误——你以为写入的是目标目录下的文件,实际可能写到了其他位置,导致查看的旧文件始终空白。 __empty_dir__方法存在二次清空操作:你先调用该方法清空目录再写入文件,如果main.py循环后续操作又触发了它,或者方法本身有递归清空、延迟执行的逻辑,会把刚写入的文件再次清空。- 文件路径参数传递错误:
main.py中传入的script_directory可能不是sub#.py所在的目录,导致写入的文件和你查看的不是同一个。
针对性修复方案
1. 统一用标准库处理路径,彻底避免斜杠/转义问题
替换硬编码的路径拼接,用os.path或pathlib保证路径解析正确:
import os def start_test(self, browser, type, script_directory): if type == "hover": screenshot_dir = os.path.join(script_directory, "hover_screenshots") elif type == "breakpoint": screenshot_dir = os.path.join(script_directory, "breakpoint_screenshots") else: raise Exception(f"Incorrect test type {type} for test starter.") self.__empty_dir__(browser, screenshot_dir) location = os.path.join(screenshot_dir, "url.txt") # 简化文件操作:只捕获文件不存在的异常,避免吞掉其他错误 try: os.remove(location) except FileNotFoundError: pass # 用with上下文管理器自动处理文件关闭,避免缓冲区未刷新 try: with open(location, "w") as the_url_file: the_url_file.write(str(self.page)) # 单个字符串用write更直接 except Exception as e: print(f"Write file error: {e}")
2. 检查__empty_dir__方法的实现
确认这个方法的逻辑:
- 是否只清空截图文件,而非目录下所有文件(包括
url.txt)? - 有没有递归删除子目录的逻辑?
- 是否在
start_test执行完后,被循环中的其他代码再次调用?
如果该方法是删除目录下所有文件,那你写入url.txt后,后续调用会直接把它删掉。
3. 验证路径参数的正确性
在start_test开头打印实际路径,确认写入位置和预期一致:
print(f"Current target dir: {script_directory}") print(f"Writing file to: {location}")
如果打印的路径不是dir1/dir2这类子目录,说明main.py传递的script_directory参数错误,导致写入的文件不在你查看的目录里。
4. 排查循环中的后续操作
检查main.py循环调用完sub#.py的函数后,有没有统一执行的清理逻辑——比如有没有遍历所有breakpoint_screenshots目录清空文件的代码,把刚写入的url.txt再次删除。
快速验证步骤
- 在
with open写入块之后,立即读取文件内容并打印:
如果这里能正常打印内容,说明写入没问题,问题出在with open(location, "r") as f: print(f"Written content: {f.read()}")start_test执行后的后续操作。 - 临时注释掉
self.__empty_dir__的调用再测试——如果文件不再变空白,说明这个方法是导致问题的原因。
内容的提问来源于stack exchange,提问作者LeeBron
相关产品推荐
相关产品推荐

