Python unittest遍历移动设备列表测试时配置不生效问题咨询
问题排查与修复方案
存在的问题
- 语法缩进错误:测试类下的
test_CP03V3测试方法没有正确缩进,Python作为缩进敏感语言,会直接导致方法无法被识别为测试类的成员,逻辑执行异常。 - Selenium 废弃参数使用:ChromeDriver 初始化时用的
chrome_options是早已废弃的参数,高版本 Selenium 不会识别该参数传入的配置,是设备配置不生效的核心原因。 - 驱动资源未释放:每个子用例执行完成后没有关闭对应浏览器进程,残留的进程、缓存会干扰新驱动的初始化,甚至出现不同子用例的配置串用问题。
- 路径转义风险:Windows 系统下的文件路径直接写在普通字符串中时,反斜杠会被识别为转义符,可能导致驱动程序读取失败,驱动初始化异常。
- 用例逻辑边界问题:需要确保所有单设备的测试执行逻辑都在
with self.subTest()的缩进块内,避免逻辑跳出子用例上下文,出现配置与用例不匹配的问题。
解决思路
- 修正代码缩进,保证测试方法属于测试类的成员。
- 将 Chrome 初始化的
chrome_options=options参数替换为options=options,匹配 Selenium 现行参数规范。 - 每个子用例的测试逻辑执行完毕后,追加
self.driver.quit()主动关闭浏览器进程,释放资源避免上下文干扰。 - 驱动路径改为原始字符串格式,在路径前加
r前缀,避免转义字符导致的路径读取失败。
修复后核心代码示例
import unittest import pandas as pd from selenium import webdriver from selenium.webdriver.chrome.options import Options class test_CP03V3(unittest.TestCase): # 修正缩进 def test_CP03V3(self): archivoX = pd.read_excel("celulares.xlsx") df = pd.DataFrame(archivoX) for i in df.index: with self.subTest(msg=df['Etiqueta'][i]): mobileEmulation = { "deviceMetrics": { "width": int(df['Width'][i]), "height": int(df['Height'][i]), "pixelRatio": float(df['pixelRatio'][i]) }, "userAgent": str(df['userAgent'][i]) } options = Options() if df['Etiqueta'][i] != 'desktop': options.add_experimental_option('mobileEmulation', mobileEmulation) else: options.add_argument("--start-maximized") # 替换废弃参数、修正路径格式 self.driver = webdriver.Chrome( executable_path=r"C:\Chrome\chromedriver.exe", options=options ) self.driver.implicitly_wait(30) self.verificationErrors = [] self.accept_next_alert = True driver = self.driver driver.delete_all_cookies() # 此处添加你的测试执行逻辑 # 测试逻辑结束后关闭驱动 self.driver.quit()
内容的提问来源于stack exchange,提问作者Fernando Maurelli
相关产品推荐
相关产品推荐

