You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python unittest遍历移动设备列表测试时配置不生效问题咨询

问题排查与修复方案

存在的问题

  • 语法缩进错误:测试类下的test_CP03V3测试方法没有正确缩进,Python作为缩进敏感语言,会直接导致方法无法被识别为测试类的成员,逻辑执行异常。
  • Selenium 废弃参数使用:ChromeDriver 初始化时用的chrome_options是早已废弃的参数,高版本 Selenium 不会识别该参数传入的配置,是设备配置不生效的核心原因。
  • 驱动资源未释放:每个子用例执行完成后没有关闭对应浏览器进程,残留的进程、缓存会干扰新驱动的初始化,甚至出现不同子用例的配置串用问题。
  • 路径转义风险:Windows 系统下的文件路径直接写在普通字符串中时,反斜杠会被识别为转义符,可能导致驱动程序读取失败,驱动初始化异常。
  • 用例逻辑边界问题:需要确保所有单设备的测试执行逻辑都在with self.subTest()的缩进块内,避免逻辑跳出子用例上下文,出现配置与用例不匹配的问题。

解决思路

  1. 修正代码缩进,保证测试方法属于测试类的成员。
  2. 将 Chrome 初始化的chrome_options=options参数替换为options=options,匹配 Selenium 现行参数规范。
  3. 每个子用例的测试逻辑执行完毕后,追加self.driver.quit()主动关闭浏览器进程,释放资源避免上下文干扰。
  4. 驱动路径改为原始字符串格式,在路径前加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:27:02