Selenium 和 PyAutoGUI 实现UI自动化测试

阶段一:环境准备与基础操作

1.1 安装工具库

bash 复制代码
# 安装Selenium(用于Web自动化)
pip install selenium

# 安装PyAutoGUI(用于桌面应用自动化)
pip install pyautogui

1.2 浏览器驱动下载

  • 下载对应浏览器版本的驱动(如ChromeDriver)
  • 将驱动文件放在Python安装目录或系统PATH路径中

阶段二:Selenium基础操作

2.1 启动浏览器并打开网页

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

# 启动Chrome浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get("https://www.baidu.com")

# 关闭浏览器
driver.quit()

2.2 元素定位与操作

python 复制代码
# 通过ID定位搜索框并输入内容
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Python自动化测试")

# 通过NAME定位搜索按钮并点击
search_button = driver.find_element(By.NAME, "wd")
search_button.click()

# 通过XPath定位元素
element = driver.find_element(By.XPATH, "//input[@class='s_ipt']")

阶段三:进阶操作

3.1 处理弹窗和窗口切换

python 复制代码
# 切换到弹窗
alert = driver.switch_to.alert
alert.accept()  # 确认弹窗

# 切换窗口
for handle in driver.window_handles:
    driver.switch_to.window(handle)

3.2 显式等待(解决元素加载问题)

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

# 等待元素出现(最多10秒)
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "element_id"))
)

阶段四:实际案例 - 电商网站自动化测试

4.1 模拟登录流程

python 复制代码
def test_login():
    driver.get("https://www.example.com/login")
    driver.find_element(By.ID, "username").send_keys("test_user")
    driver.find_element(By.ID, "password").send_keys("password123")
    driver.find_element(By.XPATH, "//button[text()='登录']").click()
    assert "我的账户" in driver.title

4.2 模拟购物流程

python 复制代码
def test_shopping():
    # 搜索商品
    driver.find_element(By.NAME, "q").send_keys("手机")
    driver.find_element(By.CLASS_NAME, "search-btn").click()
    
    # 添加第一个商品到购物车
    driver.find_element(By.XPATH, "(//a[contains(text(),'加入购物车')])[1]").click()
    
    # 进入购物车结算
    driver.find_element(By.LINK_TEXT, "去结算").click()
    assert "订单确认" in driver.page_source

阶段五:PyAutoGUI桌面自动化

5.1 基础鼠标键盘操作

python 复制代码
import pyautogui

# 移动鼠标并点击
pyautogui.moveTo(100, 200, duration=1)  # 移动到(100,200)位置,耗时1秒
pyautogui.click()  # 左键单击

# 输入文本
pyautogui.typewrite("Hello, PyAutoGUI!", interval=0.1)  # 逐个字符输入

# 快捷键操作
pyautogui.hotkey('ctrl', 'c')  # 模拟Ctrl+C

5.2 图像识别点击

python 复制代码
# 在屏幕上查找指定图片并点击
button_location = pyautogui.locateOnScreen('button.png')
if button_location:
    pyautogui.click(button_location)

阶段六:最佳实践与调试

6.1 使用Page Object模式(提高代码复用性)

python 复制代码
# 示例:登录页面对象化
class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_field = (By.ID, "username")
        self.password_field = (By.ID, "password")
        self.login_button = (By.XPATH, "//button[text()='登录']")

    def login(self, username, password):
        self.driver.find_element(*self.username_field).send_keys(username)
        self.driver.find_element(*self.password_field).send_keys(password)
        self.driver.find_element(*self.login_button).click()

6.2 错误处理与截图

python 复制代码
try:
    driver.find_element(By.ID, "non-existent-element").click()
except NoSuchElementException:
    driver.save_screenshot("error.png")  # 保存错误截图

阶段七:扩展学习方向

  1. Appium:移动端自动化测试

  2. PyTest:测试框架集成

  3. Headless模式 :无界面浏览器测试

    python 复制代码
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")
    driver = webdriver.Chrome(options=options)
相关推荐
用户019027581611 小时前
天勤 tqsdk 能做 A 股行情吗?期货强项与股票数据选型
python
2601_967979123 小时前
pip在Python中的9个必须知道的用法
python·pip·版本控制·包管理工具·requirements.txt
曲径海盗3 小时前
【Python 学习第 58 天】列表方法
python·学习笔记·编程入门
DeepVisionary3 小时前
Runway开源机器人大模型Praxis-1,推演延迟压到62毫秒
python·自动化
Cooper254 小时前
DDC 命令成功但屏幕不动:用 gamma 表重做亮度映射
python·mac
师夷长技以自愈5 小时前
手搓 AI Agent 第 7 篇:菜做砸了别硬炒——错误分类 + 双账本熔断
人工智能·python
用户956256254295 小时前
15 分钟社媒简报 Agent:我只用了搜索和模型两步
python·api
Dumbness5 小时前
关键词回复里写了 {订单号},群机器人整条消息都炸了
python·微信
调接口的阿光5 小时前
调用对话接口时输出被截断怎么办:先看 finish_reason,再决定是续写一次、缩小范围,还是换成更短的格式(Python)
人工智能·python
Cooper255 小时前
单文件 Flask 跑通微信服务器校验:先跑通再谈工程化
python·flask