当前位置: 首页 > ops >正文

【软件测试】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中测试是否能跑通:

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 启动浏览器并访问网页
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 提供多种方式定位网页元素:

# 通过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 元素操作

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

# 输入文本
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 浏览器控制
# 后退
driver.back()# 前进
driver.forward()# 刷新页面
driver.refresh()# 获取当前URL
current_url = driver.current_url# 获取页面标题
title = driver.title# 关闭当前窗口
driver.close()# 退出浏览器
driver.quit()
2.5 等待机制

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

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. 完整的示例

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

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.textprint('登录测试通过!')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 嵌套、元素属性动态变化等
http://www.xdnf.cn/news/10558.html

相关文章:

  • 【动画】unity中实现骨骼蒙皮动画
  • 使用FastAPI构建车牌检测识别服务
  • 「Python教案」字符串格式化操作
  • hooks组件-useState
  • 散列表(哈希表)
  • 函数调用的机器级实现(二):栈帧的访问与切换机制
  • 【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)
  • 用wireshark抓包分析学习USB协议
  • 浅写弱口令与命令爆破
  • Cursor 编辑器介绍:专为程序员打造的 AI 编程 IDE
  • Python项目结构
  • 录屏不再难,从功能到体验深度测评
  • MPTCP 聚合吞吐
  • LRU和LFU缓存策略
  • ESP32系列AT固件快速开发——Wi-Fi MQTT
  • 【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
  • 汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战
  • 绿盟 IPS 设备分析操作手册
  • Nuxt3部署
  • TS 星际通信指南:从 TCP 到 UDP 的宇宙漫游
  • (Python)列表的操作(增删改查、排序)
  • 2025年ESWA SCI1区TOP,改进成吉思汗鲨鱼算法MGKSO+肝癌疾病预测,深度解析+性能实测
  • 网络攻防技术四:网络侦察技术
  • 重温经典算法——快速排序
  • 探秘集成学习:从基础概念到实战应用
  • 微软PowerBI考试 PL-300学习指南
  • DeepSeek 赋能车路协同:智能交通的破局与重构
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 核心机制:滑动窗口
  • 相机--相机标定