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

无法运行Firefox Selenium IDE导出的pytest脚本,是否缺依赖包?

问题

我使用最新版本(3.17.4)的Firefox Selenium IDE录制测试步骤后,将其导出为Python(pytest)格式脚本,但无法运行且无任何响应。当前环境配置为:pytest 7.2.1、Python 3.9、Spyder 5.4.1(基于Anaconda Navigator 2.3.2)。请问是否缺少相关依赖包?

导出的原始脚本代码:

# Generated by Selenium IDE
import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

class TestSauceTest1():
  def setup_method(self, method):
    self.driver = webdriver.Firefox()
    self.vars = {}
  
  def teardown_method(self, method):
    self.driver.quit()
  
  def test_sauceTest1(self):
    # Test name: Sauce_Test1
    # Step # | name | target | value
    # 1 | open | / | 
    self.driver.get("https://www.saucedemo.com/")
    # 2 | setWindowSize | 550x680 | 
    self.driver.set_window_size(550, 680)
    # 3 | click | id=login_credentials | 
    self.driver.find_element(By.ID, "login_credentials").click()
    # 4 | click | id=login_credentials | 
    self.driver.find_element(By.ID, "login_credentials").click()
    # 5 | doubleClick | id=login_credentials | 
    element = self.driver.find_element(By.ID, "login_credentials")
    actions = ActionChains(self.driver)
    actions.double_click(element).perform()
    # 6 | click | css=*[data-test="username"] | 
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"username\"]").click()
    # 7 | type | css=*[data-test="username"] | standard_user
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"username\"]").send_keys("standard_user")
    # 8 | click | css=*[data-test="password"] | 
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"password\"]").click()
    # 9 | type | css=*[data-test="password"] | secret_aurce
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"password\"]").send_keys("secret_aurce")
    # 10 | click | css=*[data-test="login-button"] | 
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"login-button\"]").click()
    # 11 | mouseOver | css=*[data-test="login-button"] | 
    element = self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"login-button\"]")
    actions = ActionChains(self.driver)
    actions.move_to_element(element).perform()
    # 12 | mouseOut | css=*[data-test="login-button"] | 
    element = self.driver.find_element(By.CSS_SELECTOR, "body")
    actions = ActionChains(self.driver)
    actions.move_to_element(element, 0, 0).perform()
    # 13 | click | css=*[data-test="password"] | 
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"password\"]").click()
    # 14 | click | css=*[data-test="password"] | 
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"password\"]").click()
    # 15 | doubleClick | css=*[data-test="password"] | 
    element = self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"password\"]")
    actions = ActionChains(self.driver)
    actions.double_click(element).perform()
    # 16 | type | css=*[data-test="password"] | secret_sauce
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"password\"]").send_keys("secret_sauce")
    # 17 | sendKeys | css=*[data-test="password"] | ${KEY_ENTER}
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"password\"]").send_keys(Keys.ENTER)
    # 18 | click | css=*[data-test="login-button"] | 
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"login-button\"]").click()
    # 19 | click | css=*[data-test="add-to-cart-sauce-labs-backpack"] | 
    self.driver.find_element(By.CSS_SELECTOR, "*[data-test=\"add-to-cart-sauce-labs-backpack\"]").click()
    # 20 | click | linkText=1 | 
    self.driver.find_element(By.LINK_TEXT, "1").click()
解决方案

一、依赖包与驱动检查

  1. 确认selenium库安装
    在Anaconda终端执行以下命令安装或更新selenium(推荐4.x版本,与Selenium IDE 3.17.4兼容):
    conda install selenium
    # 或用pip安装
    pip install selenium
    
  2. 安装并配置GeckoDriver
    Firefox需要GeckoDriver驱动才能被selenium调用:
    • 下载与你的Firefox版本匹配的GeckoDriver
    • 把GeckoDriver所在路径添加到系统环境变量PATH;或在代码中指定路径(selenium 4.x推荐用Service类):
      from selenium.webdriver.firefox.service import Service
      def setup_method(self, method):
          self.driver = webdriver.Firefox(service=Service("你的GeckoDriver绝对路径"))
          self.wait = WebDriverWait(self.driver, 10)
          self.vars = {}
      

二、脚本优化(无响应核心原因)

录制的脚本存在冗余操作和缺少元素等待的问题,会导致程序因元素未加载完成而卡住:

  1. 添加显式等待:所有元素操作前,用WebDriverWait等待元素可见或可点击,避免页面未加载完成就执行操作。
  2. 移除冗余操作:删除重复点击、无效鼠标操作等无意义步骤。
  3. 修正输入错误:原脚本中第9行密码输入secret_aurce是错误的,直接输入正确密码secret_sauce。

优化后的可运行脚本:

# Generated by Selenium IDE(优化版)
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.firefox.service import Service

class TestSauceTest1():
  def setup_method(self, method):
    # 替换为你的GeckoDriver路径
    self.driver = webdriver.Firefox(service=Service("C:/geckodriver.exe"))
    # 初始化显式等待,超时10秒
    self.wait = WebDriverWait(self.driver, 10)
    self.vars = {}
  
  def teardown_method(self, method):
    self.driver.quit()
  
  def test_sauceTest1(self):
    # 打开目标网站
    self.driver.get("https://www.saucedemo.com/")
    self.driver.set_window_size(550, 680)
    
    # 等待用户名输入框并输入内容
    username_input = self.wait.until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "*[data-test=\"username\"]")))
    username_input.send_keys("standard_user")
    
    # 等待密码输入框并输入正确密码
    password_input = self.wait.until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "*[data-test=\"password\"]")))
    password_input.send_keys("secret_sauce")
    
    # 等待登录按钮可点击并点击
    login_btn = self.wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "*[data-test=\"login-button\"]")))
    login_btn.click()
    
    # 等待添加购物车按钮并点击
    add_cart_btn = self.wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "*[data-test=\"add-to-cart-sauce-labs-backpack\"]")))
    add_cart_btn.click()
    
    # 等待购物车链接并点击
    cart_link = self.wait.until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "1")))
    cart_link.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:02:13