• Selenium 选择器定位元素方式详解


    Selenium 选择器定位元素方式详解

    在自动化测试中,定位网页元素是一个至关重要的步骤。Selenium 提供了多种选择器来帮助我们精确地找到页面上的元素。以下将详细介绍各种选择器的用法和区别,包括 ID、XPATH、LINK_TEXT、PARTIAL_LINK_TEXT、NAME、TAG_NAME、CLASS_NAME 和 CSS_SELECTOR,并提供一个具体的 HTML 示例来说明这些选择器的使用。

    HTML 示例

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Selenium Selectors Exampletitle>
    head>
    <body>
        <div id="main" class="container">
            <h1 class="header">Welcome to Selenium Tutorialh1>
            <p name="description">This is a tutorial for learning Selenium.p>
            <a href="https://example.com" id="link1" class="link">Click herea>
            <a href="https://example.com/about" id="link2" class="link special-link">Learn morea>
            <form>
                <input type="text" name="username" class="input-field">
                <input type="password" name="password" class="input-field">
                <button type="submit" class="button primary">Submitbutton>
            form>
        div>
    body>
    html>
    

    1. ID 选择器

    用法:

    ID 选择器是最简单和最快的选择器。每个元素的 ID 在一个网页中都是唯一的,因此使用 ID 定位是最直接和可靠的。

    示例代码:
    from selenium.webdriver.common.by import By
    
    element = driver.find_element(By.ID, 'main')
    
    优点:
    • 唯一性:一个页面中的 ID 是唯一的。
    • 快速:浏览器在内部通过 ID 定位元素的速度最快。
    缺点:
    • 依赖于开发者:如果开发者没有为元素设置 ID,则无法使用。
    • 易变性:如果开发者更改了 ID,脚本也需要相应更改。

    2. XPATH 选择器

    用法:

    XPATH 是一种用于查找 XML 文档中元素的路径语言。它也适用于 HTML 文档。通过 XPATH,我们可以用绝对路径或相对路径来查找元素。

    示例代码:

    绝对路径:

    element = driver.find_element(By.XPATH, '/html/body/div/div/h1')
    

    相对路径:

    element = driver.find_element(By.XPATH, '//h1[@class="header"]')
    

    从定位到的列表元素中取出指定位置的元素

    # 先通过xpath定位到元素,然后取第二条数据
    element = driver.find_element(By.XPATH, '(//h1[@class="header"])[1]')
    
    优点:
    • 强大:可以通过元素的任何属性来定位。
    • 灵活:可以使用复杂的查询语句。
    缺点:
    • 复杂性:编写和理解 XPATH 可能比较困难。
    • 速度:相比 ID 和 CSS 选择器,XPATH 定位速度稍慢。

    3. LINK_TEXT 选择器

    用法:

    LINK_TEXT 选择器用于查找链接文本完全匹配的 标签。

    示例代码:
    element = driver.find_element(By.LINK_TEXT, 'Click here')
    
    优点:
    • 直观:可以通过链接的可见文本来定位。
    缺点:
    • 依赖文本:如果链接文本变化,脚本需要相应更改。
    • 不适用于部分匹配:无法定位部分匹配的链接文本。

    4. PARTIAL_LINK_TEXT 选择器

    用法:

    PARTIAL_LINK_TEXT 选择器用于查找链接文本部分匹配的 标签。

    示例代码:
    element = driver.find_element(By.PARTIAL_LINK_TEXT, 'Learn')
    
    优点:
    • 灵活:可以通过部分链接文本来定位。
    • 直观:使用可见文本的一部分来定位。
    缺点:
    • 易冲突:如果有多个链接包含相同的部分文本,可能会定位错误。

    5. NAME 选择器

    用法:

    NAME 选择器通过元素的 name 属性来定位元素,通常用于表单元素。

    示例代码:
    element = driver.find_element(By.NAME, 'username')
    
    优点:
    • 直观:特别适用于表单中的输入字段。
    缺点:
    • 依赖开发者:需要开发者为元素设置 name 属性。
    • 唯一性:在页面上,name 属性不一定是唯一的,可能导致冲突。

    6. TAG_NAME 选择器

    用法:

    TAG_NAME 选择器通过元素的标签名来定位元素,例如所有的

    或者 标签。

    示例代码:
    elements = driver.find_elements(By.TAG_NAME, 'a')
    
    优点:
    • 广泛:可以一次性选择多个相同标签的元素。
    缺点:
    • 精确度低:选择所有相同标签的元素可能会选择过多的无关元素。

    7. CLASS_NAME 选择器

    用法:

    CLASS_NAME 选择器通过元素的 class 属性来定位元素。

    示例代码:
    element = driver.find_element(By.CLASS_NAME, 'button')
    
    优点:
    • 直观:通过 CSS 类名来定位元素。
    缺点:
    • 唯一性:页面上可能有多个元素共享相同的类名,导致冲突。
    • 依赖于 class 属性:需要开发者为元素设置类名。

    8. CSS_SELECTOR 选择器

    用法:

    CSS_SELECTOR 选择器是最灵活和强大的选择器之一,通过 CSS 选择器语法来定位元素。

    示例代码:
    element = driver.find_element(By.CSS_SELECTOR, '.button.primary')
    
    优点:
    • 强大且灵活:可以使用复杂的选择器语法。
    • 快速:相比 XPATH 定位,CSS_SELECTOR 通常更快。
    缺点:
    • 复杂性:CSS 选择器语法可能较为复杂。

    选择器比较和选择

    选择器类型用法示例优点缺点
    ID 选择器driver.find_element(By.ID, 'main')唯一性,速度快依赖于 ID 的存在和稳定性
    XPATH 选择器driver.find_element(By.XPATH, '//h1[@class="header"]')强大且灵活复杂,速度较慢
    LINK_TEXT 选择器driver.find_element(By.LINK_TEXT, 'Click here')直观依赖文本,无法部分匹配
    PARTIAL_LINK_TEXT 选择器driver.find_element(By.PARTIAL_LINK_TEXT, 'Learn')灵活易冲突
    NAME 选择器driver.find_element(By.NAME, 'username')直观依赖于 name 属性,可能冲突
    TAG_NAME 选择器driver.find_elements(By.TAG_NAME, 'a')广泛精确度低
    CLASS_NAME 选择器driver.find_element(By.CLASS_NAME, 'button')直观唯一性低,依赖 class 属性
    CSS_SELECTOR 选择器driver.find_element(By.CSS_SELECTOR, '.button.primary')强大且灵活,速度快语法复杂

    总结

    在选择使用哪种选择器时,需要考虑具体的场景和需求:

    • ID 选择器:当元素有唯一的 ID 时,这是最快和最可靠的选择。
    • XPATH 选择器:当需要通过复杂条件定位元素时,这是最强大的选择,但需要权衡复杂性和性能。
    • LINK_TEXT 和 PARTIAL_LINK_TEXT 选择器:适用于链接定位,依赖于可见文本。
    • NAME 选择器:特别适用于表单中的输入字段,但需要注意唯一性。
    • TAG_NAME 选择器:适用于查找所有相同标签的元素,但精确度低。
    • CLASS_NAME 选择器:通过类名定位元素,适用于样式统一的元素。
    • CSS_SELECTOR 选择器:灵活且强大,是高级用户的常用选择。

    通过合理选择和结合这些选择器,可以在 Selenium 中高效准确地定位页面元素,提高自动化测试的稳定性和可靠性。

  • 相关阅读:
    分类预测 | MATLAB实现PCA-LSTM(主成分长短期记忆神经网络)分类预测
    SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)
    Codeforces暑期训练周报(7.21~7.27)
    centos 7部署Mysql8.0主从
    angr内存模拟部分源码阅读
    【操作系统】本地ping出现一般故障解决方案
    SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog
    爬虫与反爬:一场无休止之战
    Latex双栏文章
    electron+vue3 实战
  • 原文地址:https://blog.csdn.net/abments/article/details/139920053