首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >UI自动化常用库介绍及示例(一)

UI自动化常用库介绍及示例(一)

作者头像
wangmcn
发布2025-11-29 18:17:34
发布2025-11-29 18:17:34
180
举报
文章被收录于专栏:AllTests软件测试AllTests软件测试

1、Selenium

1.1 简介

Selenium是一个用于Web应用程序测试的工具,它支持多种浏览器,如Chrome、Firefox、Safari等,能够模拟用户在浏览器上的各种操作,如点击、输入、提交表单等,是Web UI自动化测试中最常用的库之一。

1.2 特点

  • 支持多种浏览器和操作系统,具有良好的跨平台性。
  • 提供了丰富的API,能够实现各种复杂的Web操作。
  • 可以与多种测试框架(如JUnit、TestNG、pytest等)集成,方便进行测试用例的组织和执行。
  • 支持分布式测试,可以在多台机器上同时执行测试用例,提高测试效率。

1.3 安装

使用pip命令即可安装Selenium:

代码语言:javascript
复制
pip install selenium

同时,需要下载对应浏览器的驱动程序(如ChromeDriver、GeckoDriver等),并配置环境变量。

1.4 示例:打开百度搜索并搜索内容

代码语言:javascript
复制
# 公众号:AllTests软件测试
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 创建Chrome浏览器驱动对象
driver = webdriver.Chrome()

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

# 定位搜索输入框
search_input = driver.find_element(By.ID, "kw")

# 在搜索输入框中输入"UI自动化"
search_input.send_keys("UI自动化")

# 模拟按下回车键进行搜索
search_input.send_keys(Keys.ENTER)

# 等待3秒,查看搜索结果
time.sleep(3)

# 关闭浏览器
driver.quit()

2、PyAutoGUI

2.1 简介

PyAutoGUI是一个用于自动化桌面GUI操作的Python库,它可以模拟鼠标和键盘的操作,适用于Windows、macOS和Linux等操作系统,常用于桌面应用的自动化测试、自动化办公等场景。

2.2 特点

  • 简单易用,API设计简洁直观,学习成本较低。
  • 支持鼠标的移动、点击、拖拽等操作,以及键盘的按键输入、组合键等操作。
  • 可以获取屏幕的尺寸、截图,以及根据图片定位屏幕上的元素。
  • 支持设置操作的延迟时间,避免操作过快导致的问题。

2.3 安装

使用pip命令安装PyAutoGUI:

代码语言:javascript
复制
pip install pyautogui

2.4 示例:模拟鼠标点击和键盘输入

代码语言:javascript
复制
# 公众号:AllTests软件测试
import pyautogui
import time

# 设置操作延迟,每次操作后等待0.5秒
pyautogui.PAUSE = 0.5

# 获取屏幕尺寸
screen_width, screen_height = pyautogui.size()
print(f"屏幕尺寸:{screen_width}x{screen_height}")

# 移动鼠标到屏幕中央
pyautogui.moveTo(screen_width // 2, screen_height // 2)

# 模拟鼠标左键点击
pyautogui.click()

# 模拟键盘输入"Hello, PyAutoGUI!"
pyautogui.typewrite("Hello, PyAutoGUI!")

# 模拟按下回车键
pyautogui.press("enter")

# 等待2秒
time.sleep(2)

# 模拟按下Ctrl+C组合键(复制)
pyautogui.hotkey("ctrl", "c")

3、Appium

3.1 简介

Appium是一个用于移动应用自动化测试的开源工具,支持iOS和Android平台的原生应用、混合应用和移动Web应用。它基于WebDriver协议,能够模拟用户在移动设备上的各种操作,如点击、滑动、输入等。

3.2 特点

  • 跨平台,支持iOS和Android,无需为不同平台编写不同的测试脚本。
  • 支持多种编程语言,如Python、Java、JavaScript等,开发者可以使用自己熟悉的语言进行测试脚本的编写。
  • 不需要修改应用的源代码,即可对应用进行自动化测试。
  • 支持真实设备和模拟器/模拟器,方便进行不同环境下的测试。

3.3 安装

首先需要安装Appium服务器,可以通过npm命令安装:

代码语言:javascript
复制
npm install -g appium

然后安装Python客户端库:

代码语言:javascript
复制
pip install appium-python-client

3.4 示例:Android计算器加法操作

代码语言:javascript
复制
# 公众号:AllTests软件测试
from appium import webdriver
from appium.webdriver.common.by import By
import time

# 配置Desired Capabilities
desired_caps = {
    "platformName": "Android", # 平台名称
    "platformVersion": "11", # 平台版本
    "deviceName": "Android Emulator", # 设备名称
    "appPackage": "com.android.calculator2", # 应用包名
    "appActivity": ".Calculator", # 应用活动名
    "noReset": True# 启动应用时不重置应用数据
}

# 连接Appium服务器,创建会话
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

# 等待2秒,确保应用启动完成
time.sleep(2)

# 定位并点击数字"1"
driver.find_element(By.ID, "com.android.calculator2:id/digit_1").click()

# 定位并点击加号"+"
driver.find_element(By.ID, "com.android.calculator2:id/op_add").click()

# 定位并点击数字"2"
driver.find_element(By.ID, "com.android.calculator2:id/digit_2").click()

# 定位并点击等号"="
driver.find_element(By.ID, "com.android.calculator2:id/eq").click()

# 等待1秒,获取计算结果
time.sleep(1)
result = driver.find_element(By.ID, "com.android.calculator2:id/result").text
print(f"计算结果:1+2={result}")

# 关闭会话
driver.quit()

4、Playwright

4.1 简介

Playwright是微软开源的一款Web自动化测试工具,支持Chrome、Firefox、Safari以及Edge等主流浏览器,同时兼容Windows、macOS和Linux系统。它采用了全新的自动化架构,能够提供更快速、更可靠的自动化体验,支持页面截图、视频录制等丰富功能。

4.2 特点

  • 自动等待元素就绪,无需手动添加大量sleep语句,减少测试不稳定因素。
  • 支持单个测试用例在多个浏览器中并行执行,提高测试效率。
  • 提供强大的页面交互API,支持文件上传、下载、弹窗处理等复杂场景。
  • 可录制用户操作并自动生成测试脚本,降低脚本编写门槛。

4.3 安装

使用pip命令安装Playwright:

代码语言:javascript
复制
pip install playwright

安装完成后,还需下载对应浏览器的驱动:

代码语言:javascript
复制
playwright install

4.4 示例:打开京东搜索并查看商品列表

代码语言:javascript
复制
# 公众号:AllTests软件测试
from playwright.sync_api import sync_playwright
import time

with sync_playwright() as p:
    # 启动Chrome浏览器
    browser = p.chromium.launch(headless=False)
    # 创建新页面
    page = browser.new_page()
    # 打开京东首页
    page.goto("https://www.jd.com/")
    # 定位搜索框并输入"笔记本电脑"
    page.locator("#key").fill("笔记本电脑")
    # 点击搜索按钮
    page.locator(".button").click()
    # 等待页面加载完成
    page.wait_for_load_state("networkidle")
    # 获取前5个商品名称并打印
    goods_list = page.locator(".gl-item .p-name em").nth(0).all_text_contents()[:5]
    print("前5个商品名称:")
    for idx, goods in enumerate(goods_list, 1):
        print(f"{idx}. {goods}")
    # 等待3秒后关闭浏览器
    time.sleep(3)
    browser.close()

5、Pywinauto

5.1 简介

Pywinauto是一款专门用于Windows桌面应用自动化的Python库,它能够直接与Windows应用程序的UI元素进行交互,支持通过控件名称、类名、坐标等方式定位元素,适用于Windows桌面软件的自动化测试、数据录入、流程自动化等场景。

5.2 特点

  • 深度集成Windows API,能精准控制Windows应用的各种控件(如按钮、文本框、列表框等)。
  • 支持两种主要的控件访问模式:UIA模式(适用于现代应用)和Win32模式(适用于传统Win32应用)。
  • 提供直观的API,如click()、type_keys()、select()等,操作简单易懂。
  • 支持窗口的最小化、最大化、关闭等窗口级操作,以及控件的属性获取(如文本、状态等)。

5.3 安装

使用pip命令安装Pywinauto:

代码语言:javascript
复制
pip install pywinauto

5.4 示例:Windows记事本自动化操作

代码语言:javascript
复制
# 公众号:AllTests软件测试
from pywinauto import Application
import time

# 启动Windows记事本应用
app = Application(backend="win32").start("notepad.exe")
# 连接到记事本窗口
dlg = app.Notepad

# 等待窗口打开
time.sleep(1)

# 在记事本中输入文本
dlg.Edit.type_keys("Pywinauto 桌面自动化示例:\n这是一个Windows记事本的自动化操作演示。", with_spaces=True)

# 点击"文件"菜单
dlg.menu_select("文件(&F)")
# 点击"保存"选项
dlg.menu_select("文件(&F)->保存(&S)")

# 等待保存对话框打开
save_dlg = app["另存为"]
time.sleep(1)

# 输入保存文件名
save_dlg.Edit.type_keys("automation_demo.txt")
# 点击"保存"按钮
save_dlg["保存(&S)"].click()

# 等待保存完成
time.sleep(2)

# 关闭记事本
dlg.close()

6、Robot Framework

6.1 简介

Robot Framework是一款通用的开源自动化测试框架,不仅支持UI自动化,还可用于接口测试、关键字测试等多种测试类型。它采用关键字驱动的测试方式,测试用例以表格形式编写,可读性强,易于维护,常与SeleniumLibrary等库结合实现Web UI自动化。

6.2 特点

  • 关键字驱动模式,允许自定义关键字,提高测试用例的复用性和可维护性。
  • 测试用例采用表格格式(HTML、TSV等)编写,非技术人员也能参与测试用例设计。
  • 支持丰富的测试库和工具集成,如SeleniumLibrary(Web自动化)、AppiumLibrary(移动自动化)等。
  • 自带详细的测试报告和日志,便于分析测试结果和定位问题。

6.3 安装

使用pip命令安装Robot Framework核心框架:

代码语言:javascript
复制
pip install robotframework

若用于Web UI自动化,还需安装SeleniumLibrary:

代码语言:javascript
复制
pip install robotframework-seleniumlibrary

6.4 示例:Web搜索自动化测试用例(表格形式)

创建名为baidu_search.robot的测试文件,内容如下:

代码语言:javascript
复制
*** Settings ***
Library SeleniumLibrary

*** Variables ***
${BROWSER}        Chrome
${URL}            https://www.baidu.com
${SEARCH_INPUT}   id=kw
${SEARCH_BUTTON}  id=su
${SEARCH_TEXT}    UI自动化

*** Test Cases ***
百度搜索测试用例
    Open Browser ${URL}    ${BROWSER}
    Maximize Browser Window
    Input Text ${SEARCH_INPUT}    ${SEARCH_TEXT}
    Click Button ${SEARCH_BUTTON}
    Wait Until Page Contains ${SEARCH_TEXT}    10
    Close Browser

执行测试用例的命令:

代码语言:javascript
复制
robot baidu_search.robot

执行完成后,会生成report.html(测试报告)和log.html(测试日志)文件,可直接在浏览器中打开查看详细结果。

7、Pyppeteer

7.1 简介

Pyppeteer是Google Puppeteer的Python端口,基于Chrome DevTools协议实现Web自动化。它专注于控制Chrome或Chromium浏览器,支持无头模式(无界面运行)和有头模式,常用于Web页面爬取、自动化测试、页面渲染等场景,尤其在处理单页应用(SPA)时表现出色。

7.2 特点

  • 基于Chrome DevTools协议,无需额外安装浏览器驱动,启动速度快且稳定性高。
  • 默认支持无头模式,适合在服务器或CI/CD环境中运行,资源占用低。
  • 提供异步API(基于asyncio),可高效处理并发页面操作,提升自动化效率。
  • 支持页面截图、PDF生成、网络请求拦截、Cookie管理等丰富功能。

7.3 安装

使用pip命令安装Pyppeteer:

代码语言:javascript
复制
pip install pyppeteer

首次运行时会自动下载匹配版本的Chromium,若下载失败可手动指定Chromium路径。

7.4 示例:淘宝商品搜索与截图

代码语言:javascript
复制
# 公众号:AllTests软件测试
import asyncio
from pyppeteer import launch

asyncdef taobao_search():
    # 启动浏览器,设置为有头模式(headless=False)
    browser = await launch(headless=False, args=["--start-maximized"])
    # 创建新页面
    page = await browser.newPage()
    # 设置页面视口大小
    await page.setViewport({"width": 1920, "height": 1080})
    
    # 打开淘宝首页
    await page.goto("https://www.taobao.com/")
    # 等待搜索框加载完成
    await page.waitForSelector("#q")
    
    # 输入搜索关键词"无线耳机"并提交
    await page.type("#q", "无线耳机")
    await page.keyboard.press("Enter")
    
    # 等待搜索结果页面加载
    await page.waitForSelector(".J_MouserOnverReq .title a")
    
    # 截取当前页面并保存
    await page.screenshot({"path": "taobao_search_result.png", "fullPage": True})
    
    # 获取前3个商品标题
    goods_titles = await page.evaluate("""() => {
        let titles = [];
        let items = document.querySelectorAll('.J_MouserOnverReq .title a');
        for (let i = 0; i < 3; i++) {
            titles.push(items[i].title);
        }
        return titles;
    }""")
    
    print("前3个商品标题:")
    for idx, title in enumerate(goods_titles, 1):
        print(f"{idx}. {title}")
    
    # 关闭浏览器
    await browser.close()

# 运行异步函数
asyncio.get_event_loop().run_until_complete(taobao_search())
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档