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

如何用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编辑,可利用其自带的数据驱动功能:

  1. 打开Selenium IDE,加载原录制的测试用例
  2. 点击顶部「更多选项」→「数据驱动」
  3. 添加数据源:选择「文件」→ 上传urls.txt,设置每行作为一个数据条目
  4. 将原脚本中固定的URL替换为数据变量(例如${url})
  5. 配置循环:设置测试用例遍历所有数据条目
  6. 重新导出脚本,此时脚本自带循环逻辑,且可重新导入IDE

内容的提问来源于stack exchange,提问作者nst5

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:38