云计算百科
云计算领域专业知识百科平台

Selenium Web 自动化实战:8 种元素定位方式 + 无头浏览器翻页断言


title: “Selenium Web 自动化实战:8 种元素定位方式 + 无头浏览器翻页断言(附截图)” tags: [Python, 测试, Selenium, Web自动化, Chrome, 实战] categories: [软件自动化测试] description: “在真实 ECS 上完成 Chrome 无头浏览器 + Selenium 的 Web 自动化:八种元素定位方式逐一演示、提取整页数据、点击翻页并断言 URL、保存截图;含驱动安装的真实坑与镜像方案。” date: 2026-09-18

Selenium Web 自动化实战:8 种元素定位方式 + 无头浏览器翻页断言

一、背景与目标

接口测试覆盖的是"数据对不对",而 Web 自动化测试覆盖的是"页面行为对不对"——按钮能不能点、翻页会不会跳、元素在不在。Selenium 通过真实驱动浏览器来完成这一切。

本文目标:

  • 在无界面 ECS 上用 Chrome 无头模式 跑 Selenium;
  • 演示 8 种元素定位方式(ID/NAME/CLASS/TAG/LINK/PARTIAL_LINK/CSS/XPATH);
  • 提取整页数据、点击「下一页」并断言 URL 变化;
  • 保存截图作为证据。
  • 目标站点使用自建书城(http://127.0.0.1:8000),完全合规。

    二、环境准备

    2.1 安装 Selenium 与 Chrome

    pip3 install –break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
    # 下载并安装 Chrome(dpkg 报依赖错误属正常,接着修依赖)
    curl -sSL -o /tmp/google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    dpkg -i /tmp/google-chrome.deb
    apt-get update && apt-get install -f -y # 刷新源后修复依赖
    google-chrome –version

    真实输出:

    Google Chrome 153.0.8010.52

    关键坑:dpkg 安装 Chrome 时报一堆 404 Failed to fetch,是因为 apt 本地元数据过期。先 apt-get update 再 apt-get install -f -y 即可解决。

    2.2 下载匹配版本的 chromedriver

    Selenium 4 自带的 Selenium Manager 会尝试从 Google 下载驱动,在部分网络环境下极慢甚至卡死。实测改用国内镜像直连更稳:

    curl -sSL -o chromedriver.zip \\
    "https://cdn.npmmirror.com/binaries/chrome-for-testing/153.0.8010.52/linux64/chromedriver-linux64.zip"
    unzip -o chromedriver.zip
    ./chromedriver-linux64/chromedriver –version

    真实输出:

    ChromeDriver 153.0.8010.52 (78e5e45d4bb41035e17ea4da2cc257f496416ac9-…)

    关键点:chromedriver 版本必须与 Chrome 主版本一致(这里都是 153),否则启动报「session not created」错误。

    三、分步实操

    3.1 无头启动

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.chrome.service import Service

    options = Options()
    options.add_argument("–headless=new") # 无头模式
    options.add_argument("–no-sandbox") # root 运行需要
    options.add_argument("–disable-dev-shm-usage") # 容器共享内存限制

    driver = webdriver.Chrome(
    service=Service("/root/crawler-lab/chromedriver-linux64/chromedriver"),
    options=options)

    真实输出(打开站点后):

    1) 打开站点
    标题: 好书清单 – 第 1 页
    当前URL: http://127.0.0.1:8000/page/1

    3.2 八种元素定位方式

    from selenium.webdriver.common.by import By

    driver.find_element(By.TAG_NAME, "h1") # 标签名
    driver.find_element(By.CLASS_NAME, "title") # 类名
    driver.find_element(By.CSS_SELECTOR, "span.price") # CSS 选择器
    driver.find_element(By.XPATH, '//div[contains(@class,"book")][1]') # XPath
    driver.find_element(By.LINK_TEXT, "流畅的Python") # 完整链接文本
    driver.find_element(By.PARTIAL_LINK_TEXT, "流畅") # 部分链接文本
    # By.ID / By.NAME 在本站点无对应属性,生产项目按需使用

    真实输出:

    [TAG_NAME] 首个 <h1>: 📚 好书清单(第 1 / 3 页)
    [CLASS_NAME] 首个 .title: Python编程:从入门到实践
    [CSS_SELECTOR] 首个 span.price: ¥89.0
    [XPATH] 第1个 .book 块文本(前40字): Python编程:从入门到实践 作者:Eric Matthes ¥89.0
    [LINK_TEXT] 找到链接《流畅的Python》href: http://127.0.0.1:8000/book/2

    3.3 提取整页数据 + 点击翻页断言

    books = driver.find_elements(By.CSS_SELECTOR, "div.book")
    for b in books:
    t = b.find_element(By.CLASS_NAME, "title").text
    p = b.find_element(By.CSS_SELECTOR, "span.price").text
    print(f"《{t}》 {p}")

    before = driver.current_url
    driver.find_element(By.LINK_TEXT, "下一页").click()
    after = driver.current_url
    assert after.endswith("/page/2"), "翻页失败"

    真实输出:

    3) 提取本页全部书目(find_elements)
    本页共 6 本书:
    《Python编程:从入门到实践》 ¥89.0
    《流畅的Python》 ¥139.0
    《深入理解计算机系统》 ¥139.0
    《算法导论》 ¥128.0
    《黑客与画家》 ¥69.0
    《代码整洁之道》 ¥59.0

    4) 点击翻页 + 断言 URL 变化
    翻页前URL: http://127.0.0.1:8000/page/1
    翻页后URL: http://127.0.0.1:8000/page/2
    第2页第一本书: 重构:改善既有代码的设计
    断言通过: 已成功翻到第 2 页

    讲解:find_element(单数)返回第一个匹配元素,find_elements(复数)返回列表。click() 触发真实点击、current_url 断言跳转结果,这就是 Web 自动化测试的核心范式:操作 → 断言结果。

    3.4 截图存证

    driver.save_screenshot("/root/crawler-lab/selenium_screenshot.png")

    真实输出:

    5) 截图保存
    截图已保存: /root/crawler-lab/selenium_screenshot.png

    无头模式也可以截图,是 CI 里留证据、或失败时截屏排查的常用手段。

    四、常见坑与解决

  • Selenium Manager 下载驱动卡死:改用国内镜像 cdn.npmmirror.com/binaries/chrome-for-testing/ 手动下载,再用 Service(path) 显式指定,绕过自动下载。
  • session not created: Chrome version not supported:chromedriver 与 Chrome 主版本不一致,务必保持同版本(本文均为 153)。
  • root 下启动报 –no-sandbox 错误:容器/root 环境必须加 –no-sandbox –disable-dev-shm-usage。
  • 元素找不到(NoSuchElementException):用 implicitly_wait 设置隐式等待,或对异步加载页面用显式等待 WebDriverWait + expected_conditions。
  • dpkg 装 Chrome 报 404:先 apt-get update 刷新元数据再 install -f。
  • 五、小结

    本文在真实无头 Chrome 环境里跑通了 Selenium 的「启动 → 定位 → 操作 → 断言 → 截图」全流程:八种定位方式逐一实测、自动翻页 + URL 断言、截图留证。至此,阶段七「软件自动化测试」的接口自动化与 Web 自动化两条主线均已落地。


    配套源码:code/selenium_demo.py;运行产物:selenium_screenshot.png。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Selenium Web 自动化实战:8 种元素定位方式 + 无头浏览器翻页断言
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!