如何用PyTest参数化URL列表,实现Selenium批量禁用店铺订阅
解决方案:读取URL批量执行订阅禁用 + 脚本无法导入IDE的处理
一、修改脚本实现读取urls.txt循环执行
步骤说明
- 读取
urls.txt中的每行URL,逐个处理 - 修复原脚本中硬编码的窗口句柄问题(录制的临时句柄无法复用)
- 封装操作逻辑,循环调用
修改后的完整脚本
# Generated by Selenium IDE, modified for batch processing import pytest import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 读取urls.txt中的URL列表,过滤空行 def get_urls(): with open('urls.txt', 'r', encoding='utf-8') as f: return [line.strip() for line in f if line.strip()] class TestFRS(): def setup_method(self, method): self.driver = webdriver.Firefox() self.wait = WebDriverWait(self.driver, 10) # 添加显式等待,提升稳定性 def teardown_method(self, method): self.driver.quit() # 封装单个店铺的订阅禁用逻辑 def disable_subscription(self, url): self.driver.get(url) self.driver.set_window_size(2576, 1408) root_window = self.driver.current_window_handle # 等待新窗口打开并动态切换(替换原脚本中硬编码的win3657) self.wait.until(EC.number_of_windows_to_be(2)) for window_handle in self.driver.window_handles: if window_handle != root_window: self.driver.switch_to.window(window_handle) break # 执行禁用操作(加显式等待避免页面加载慢导致元素找不到) self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li:nth-child(3) div:nth-child(2)"))).click() self.wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Edit"))).click() self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".radio-square-option:nth-child(2) .x-checklist__span"))).click() self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn"))).click() # 关闭当前窗口并切回根窗口 self.driver.close() self.driver.switch_to.window(root_window) # 用pytest参数化实现循环执行每个URL @pytest.mark.parametrize("url", get_urls()) def test_batch_disable(self, url): self.disable_subscription(url)
关键修改点
- 新增
get_urls()函数读取文本文件中的URL,自动过滤空行 - 封装
disable_subscription()方法,单个URL的处理逻辑可复用 - 用显式等待替换直接元素查找,解决页面加载延迟导致的报错
- 动态切换窗口:通过窗口句柄列表定位新窗口,不再依赖录制时的临时变量名
二、脚本修改后无法导入Selenium IDE的解决方案
Selenium IDE仅能识别自身导出的固定结构脚本,手动修改后(添加循环、参数化、自定义方法)会破坏IDE的识别格式,因此无法重新导入。有两种解决方式:
方式1:直接运行修改后的Python脚本
这是最直接的方案,无需再导入IDE。运行命令:
pytest your_script_name.py -v
确保已安装依赖:pip install pytest selenium
方式2:在Selenium IDE中实现数据驱动(保留可视化编辑)
如果想继续使用IDE编辑,可利用其自带的数据驱动功能:
- 打开Selenium IDE,加载原录制的测试用例
- 点击顶部「更多选项」→「数据驱动」
- 添加数据源:选择「文件」→ 上传
urls.txt,设置每行作为一个数据条目 - 将原脚本中固定的URL替换为数据变量(例如
${url}) - 配置循环:设置测试用例遍历所有数据条目
- 重新导出脚本,此时脚本自带循环逻辑,且可重新导入IDE
内容的提问来源于stack exchange,提问作者nst5
相关产品推荐
相关产品推荐

