【软件测试】web自动化:Pycharm+Selenium+Firefox(一)

步骤:配置Pycharm,Firefox安装Selenium IDE插件,下载geckodriver插件,安装至Firefox目录下。https://blog.csdn.net/weixin_61926199/article/details/148383668?fromshare=blogdetail&sharetype=blogdetail&sharerId=148383668&sharerefer=PC&sharesource=weixin_61926199&sharefrom=from_link

1.在Pycharm中测试是否能跑通:

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
import time

# 1. 设置geckodriver路径(替换为你的实际路径)
gecko_path = r"F:\Julyapp\Firefox\geckodriver.exe"  # Windows示例
# Mac用户使用: gecko_path = "/Users/你的名字/webdriver/geckodriver"

# 2. 创建Firefox浏览器实例
service = Service(executable_path=gecko_path)
driver = webdriver.Firefox(service=service)

try:
    # 3. 最大化窗口并打开测试网页
    driver.maximize_window()
    driver.get("https://www.saucedemo.com/")
    print("已打开SauceDemo网站")
    time.sleep(2)

    # 4. 登录操作
    username = driver.find_element(By.ID, "user-name")
    password = driver.find_element(By.ID, "password")
    login_btn = driver.find_element(By.ID, "login-button")

    username.send_keys("standard_user")
    password.send_keys("secret_sauce")
    login_btn.click()
    print("已执行登录操作")
    time.sleep(2)

    # 5. 验证登录成功(3种方式)
    # 方式1:验证URL包含"inventory"
    assert "inventory" in driver.current_url, \
        f"URL验证失败!当前URL: {driver.current_url}"
    print("✅ URL验证通过")

    # 方式2:验证页面标题(注意实际显示的是"PRODUCTS")
    product_title = driver.find_element(By.CLASS_NAME, "title")
    assert product_title.text == "Products", \
        f"标题验证失败!实际值: '{product_title.text}',预期值: 'Products'"
    print("✅ 标题验证通过")

    # 方式3:验证购物车图标可见
    cart_icon = driver.find_element(By.CLASS_NAME, "shopping_cart_link")
    assert cart_icon.is_displayed(), "购物车图标不可见"
    print("✅ 购物车图标验证通过")

    # 额外验证:检查商品列表是否存在
    inventory_items = driver.find_elements(By.CLASS_NAME, "inventory_item")
    assert len(inventory_items) > 0, "未找到任何商品"
    print(f"✅ 商品列表验证通过,找到{len(inventory_items)}个商品")

    # 验证第一个商品名称(可选)
    first_item = driver.find_element(By.CLASS_NAME, "inventory_item_name")
    print(f"第一个商品名称: {first_item.text}")

    print("🔥 所有测试通过!登录功能验证成功!")

except Exception as e:
    print(f"❌ 测试失败: {str(e)}")
    # 失败时截图保存
    driver.save_screenshot("error_screenshot.png")
    print("已保存错误截图: error_screenshot.png")

finally:
    # 关闭浏览器
    time.sleep(3)
    driver.quit()
    print("浏览器已关闭")

2. 基本操作语法

2.1 启动浏览器并访问网页
python 复制代码
from selenium import webdriver
from selenium.webdriver.firefox.service import Service

# 设置驱动路径(需替换为你的实际路径)
driver_path = '/path/to/geckodriver'
service = Service(driver_path)

# 创建Firefox浏览器实例
driver = webdriver.Firefox(service=service)

# 打开网页
driver.get('https://www.example.com')
2.2 定位元素

Selenium 提供多种方式定位网页元素:

python 复制代码
# 通过ID定位
element = driver.find_element(By.ID, 'element_id')

# 通过类名定位
element = driver.find_element(By.CLASS_NAME, 'class_name')

# 通过标签名定位
element = driver.find_element(By.TAG_NAME, 'tag_name')

# 通过链接文本定位
element = driver.find_element(By.LINK_TEXT, '完整链接文本')

# 通过部分链接文本定位
element = driver.find_element(By.PARTIAL_LINK_TEXT, '部分链接文本')

# 通过CSS选择器定位
element = driver.find_element(By.CSS_SELECTOR, 'css_selector')

# 通过XPath定位
element = driver.find_element(By.XPATH, 'xpath_expression')
2.3 元素操作

定位到元素后,可以进行各种操作:

python 复制代码
# 输入文本
element.send_keys('Hello, World!')

# 点击按钮
element.click()

# 清空输入框
element.clear()

# 获取元素文本
text = element.text

# 获取元素属性
value = element.get_attribute('attribute_name')

# 判断元素是否可见
is_visible = element.is_displayed()

# 判断元素是否可点击
is_enabled = element.is_enabled()
2.4 浏览器控制
python 复制代码
# 后退
driver.back()

# 前进
driver.forward()

# 刷新页面
driver.refresh()

# 获取当前URL
current_url = driver.current_url

# 获取页面标题
title = driver.title

# 关闭当前窗口
driver.close()

# 退出浏览器
driver.quit()
2.5 等待机制

为了确保元素加载完成后再操作,需要使用等待:

python 复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 显式等待:最多等待10秒,直到元素可见
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, 'element_id'))
)

# 隐式等待:设置全局等待时间
driver.implicitly_wait(10)  # 所有操作最多等待10秒

3. 完整的示例

下面是一个完整的登录测试示例:

python 复制代码
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 设置驱动路径
driver_path = '/path/to/geckodriver'
service = Service(driver_path)

# 启动浏览器
driver = webdriver.Firefox(service=service)
driver.implicitly_wait(10)  # 隐式等待10秒

try:
    # 打开登录页面
    driver.get('https://example.com/login')
    
    # 输入用户名和密码
    username = driver.find_element(By.ID, 'username')
    password = driver.find_element(By.ID, 'password')
    username.send_keys('your_username')
    password.send_keys('your_password')
    
    # 点击登录按钮
    login_button = driver.find_element(By.ID, 'login-button')
    login_button.click()
    
    # 等待登录成功后的元素出现
    welcome_message = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.CLASS_NAME, 'welcome-message'))
    )
    
    # 验证登录成功
    assert '欢迎' in welcome_message.text
    print('登录测试通过!')
    
except Exception as e:
    print(f'测试失败:{e}')
finally:
    # 关闭浏览器
    time.sleep(3)  # 等待3秒便于观察
    driver.quit()

4. 注意事项

  1. 元素定位优先级:ID > CSS 选择器 > XPath
  2. 避免硬编码等待 :尽量使用显式等待代替time.sleep()
  3. 异常处理 :使用try-except-finally确保测试完成后资源被释放
  4. 元素定位失败:常见原因包括元素未加载、iframe 嵌套、元素属性动态变化等
相关推荐
我要学习别拦我~几秒前
kaggle分析项目:steam付费游戏数据分析
python·游戏·数据分析
大模型真好玩7 分钟前
深入浅出LangChain AI Agent智能体开发教程(四)—LangChain记忆存储与多轮对话机器人搭建
前端·人工智能·python
love530love8 分钟前
命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
开发语言·人工智能·windows·python·conda·uv
都叫我大帅哥32 分钟前
深度学习的"Hello World":多层感知机全解指南
python·深度学习
都叫我大帅哥36 分钟前
LangChain分层记忆解决方案:完整案例
python·langchain
小王子102441 分钟前
Django实时通信实战:WebSocket与ASGI全解析(下)
python·websocket·django
alex1001 小时前
AI Agent开发学习系列 - langchain之LCEL(5):如何创建一个Agent?
人工智能·python·语言模型·langchain·prompt·向量数据库·ai agent
小马哥编程2 小时前
如何解决 undetected_chromedriver 启动慢问题
chrome·selenium·ui
海哥编程2 小时前
Python 数据分析(二):Matplotlib 绘图
python·数据分析·matplotlib
go54631584653 小时前
Python点阵字生成与优化:从基础实现到高级渲染技术
开发语言·人工智能·python·深度学习·分类·数据挖掘