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)
相关推荐
淬炼之火8 分钟前
基于pycharm和anaconda的yolo简单部署测试
python·深度学习·yolo·pycharm·ultralytics
麦麦大数据34 分钟前
F024 CNN+vue+flask电影推荐系统vue+python+mysql+CNN实现
vue.js·python·cnn·flask·推荐算法
Zzz 小生39 分钟前
编程基础学习(一)-Python基础语法+数据结构+面向对象全解析
开发语言·python
white-persist40 分钟前
JWT 漏洞全解析:从原理到实战
前端·网络·python·安全·web安全·网络安全·系统安全
久未1 小时前
Pytorch autoload机制自动加载树外扩展(Autoload Device Extension)
人工智能·pytorch·python
java1234_小锋2 小时前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras.Model来定义模型
python·深度学习·tensorflow·tensorflow2
Learn Beyond Limits2 小时前
TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
人工智能·python·深度学习·机器学习·ai·tensorflow·吴恩达
java1234_小锋2 小时前
TensorFlow2 Python深度学习 - 函数式API(Functional API)
python·深度学习·tensorflow·tensorflow2
Y200309162 小时前
使用 PyTorch 实现 MNIST 手写数字识别
python
马尚来2 小时前
移动端自动化测试Appium,从入门到项目实战Python版
python