Playwright+unittest框架中使用input()选择测试浏览器失效问题排查
问题原因
- 类属性定义阶段执行
input()时机错误:Python导入该测试类时就会立即执行input()语句,而非等到测试用例运行时才触发。unittest的测试收集、HTMLTestRunner运行器、IDE内置测试面板等场景下,大多默认不开放交互控制台的标准输入流,input()要么直接卡住,要么抛出EOF错误直接终止运行。 - 未做输入内容归一化处理:用户输入时可能带前后空格、大小写不匹配(比如输入
firefox、Firefox),无法命中你的分支判断逻辑,导致浏览器启动不符合预期。
修复方案
将input()调用移到测试启动后的执行阶段,同时增加输入内容的清洗逻辑,修改后的代码如下:
from playwright.sync_api import sync_playwright from locators import Locators_evou import unittest import HtmlTestRunner class Test(unittest.TestCase): # 类属性仅保留默认标记,不在定义阶段执行input browser_option = None @classmethod def setUpClass(cls): # 所有测试用例执行前仅触发一次输入交互 input_val = input("Choose a browser (Chrome/Firefox/Edge): ").strip() # 归一化处理:空值默认Chrome,统一首字母大写避免大小写输入错误 if not input_val: cls.browser_option = "Chrome" else: cls.browser_option = input_val.capitalize() def get_browser(self, p): browserR = p.chromium.launch(headless=False) if self.browser_option == "Firefox": browserR = p.firefox.launch(headless=False) elif self.browser_option == "Edge": browserR = p.chromium.launch(channel="msedge",headless=False) return browserR def test_company1(self): with sync_playwright() as p: browser = self.get_browser(p) page = browser.new_page() page.goto("http://localhost:3000/organigrama/miempresa-edit") browser.close()
运行注意事项
不要使用IDE内置的测试面板运行该代码,需要直接在终端用命令python 你的测试文件名.py执行,才能正常触发控制台输入交互。
内容的提问来源于stack exchange,提问作者Liliana González
相关产品推荐
相关产品推荐

