Selenium Python测试用例失败截图无法保存问题求助
问题分析与修复方案
核心问题汇总
- 浏览器提前关闭:测试方法中先执行
self.driver.close()再尝试截图,此时driver实例已失效,无法生成截图。 - 方法名拼写错误:
save_screenshots应为save_screenshot(多了一个s),会触发AttributeError导致截图逻辑无法执行。 - 路径语法错误:字符串引号嵌套混乱,导致路径无效;跨平台路径分隔符使用不当。
- 相对路径可靠性问题:若当前工作目录非项目根目录,相对路径无法定位到Screenshots文件夹。
修正后的代码
import time import os from pageObjects.loginPage import LoginPage from utilities.readProperties import ReadConfig # 定义项目根目录和截图文件夹路径,避免硬编码 PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) SCREENSHOT_DIR = os.path.join(PROJECT_ROOT, "Screenshots") # 确保截图文件夹存在,不存在则自动创建 os.makedirs(SCREENSHOT_DIR, exist_ok=True) class Test_001_Login: baseURL = ReadConfig.getApplicationURL() username = ReadConfig.getUseremail() password = ReadConfig.getPassword() def test_homePageTitle(self, setup): self.driver = setup self.driver.get(self.baseURL) act_title = self.driver.title if act_title == "Your store. Login": self.driver.close() assert True else: time.sleep(5) # 使用os.path拼接跨平台有效路径 screenshot_path = os.path.join(SCREENSHOT_DIR, "test_homePageTitle.png") self.driver.save_screenshot(screenshot_path) self.driver.close() assert False def test_login(self, setup): self.driver = setup self.driver.get(self.baseURL) time.sleep(10) self.lp = LoginPage(self.driver) self.lp.setUserName(self.username) self.lp.setPassword(self.password) self.lp.clickLogin() act_title = self.driver.title if act_title == "Dashboard / nopCommerce administration": self.driver.close() assert True else: time.sleep(5) screenshot_path = os.path.join(SCREENSHOT_DIR, "test_login.png") self.driver.save_screenshot(screenshot_path) self.driver.close() assert False
关键优化点
- 调整
close()执行顺序:将浏览器关闭操作移到截图完成后,确保driver在截图时处于活跃状态。 - 修正方法名:将拼写错误的
save_screenshots改为官方正确方法名save_screenshot。 - 使用
os.path处理路径:通过os.path.join生成跨平台兼容的路径,自动适配Windows/macOS/Linux的路径分隔符;通过os.makedirs提前创建截图文件夹,避免因文件夹不存在导致的保存失败。 - 绝对路径定位:基于项目根目录生成截图文件夹的绝对路径,彻底解决相对路径的不确定性问题。
内容的提问来源于stack exchange,提问作者Ei Shwe Zin Thit
相关产品推荐
相关产品推荐

