无法运行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()
解决方案
一、依赖包与驱动检查
- 确认selenium库安装
在Anaconda终端执行以下命令安装或更新selenium(推荐4.x版本,与Selenium IDE 3.17.4兼容):conda install selenium # 或用pip安装 pip install selenium - 安装并配置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 = {}
二、脚本优化(无响应核心原因)
录制的脚本存在冗余操作和缺少元素等待的问题,会导致程序因元素未加载完成而卡住:
- 添加显式等待:所有元素操作前,用
WebDriverWait等待元素可见或可点击,避免页面未加载完成就执行操作。 - 移除冗余操作:删除重复点击、无效鼠标操作等无意义步骤。
- 修正输入错误:原脚本中第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
相关产品推荐
相关产品推荐

