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)
相关推荐
小声读源码2 分钟前
【技巧】使用UV创建python项目的开发环境
开发语言·python·uv·dify
程序员杰哥6 分钟前
自动化测试基础知识详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
zm-v-1593043398610 分钟前
解锁遥感数据密码:DeepSeek、Python 与 OpenCV 的协同之力
开发语言·python·opencv
勘察加熊人36 分钟前
Python+Streamlit实现登录页
开发语言·python
DavieLau40 分钟前
Python开发后端InfluxDB数据库测试接口
服务器·数据库·python·时序数据库
文人sec1 小时前
接口自动化测试设计思路--设计实战
python·https·单元测试·自动化·pytest
子燕若水1 小时前
Flask 调试的时候进入main函数两次
后端·python·flask
编程有点难1 小时前
Python训练打卡Day23
开发语言·python
qq_14182697322 小时前
python通过curl访问deepseek的API调用案例
java·数据库·python
红衣小蛇妖4 小时前
Python基础学习-Day23
开发语言·python·学习