Selenium元素定位终极指南:8种方式全面解析+实战代码,告别找不到元素的烦恼!

发布于:2025-09-06 ⋅ 阅读:(16) ⋅ 点赞:(0)

小伙伴们,大家好~

今天给大家梳理一下自动化测试里面的selenium的八种元素定位方式

概念

元素定位:就是要让我们自动化代码找到前端网页中的元素(比如:按钮、输入框等)

注意:selenium定位前端元素有多个时,会默认返回第一个符合条件的元素

假设我们的前端代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Selenium元素定位示例</title>
    <style>
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f5f7f9;
            color: #333;
        }
        .container {
            background-color: white;
            border-radius: 8px;
            padding: 25px;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }
        h1 {
            color: #2c3e50;
            text-align: center;
            margin-bottom: 30px;
        }
        .form-group {
            margin-bottom: 15px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: 600;
        }
        input[type="text"],
        input[type="password"] {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
            box-sizing: border-box;
        }
        .submit-btn {
            background-color: #3498db;
            color: white;
            border: none;
            padding: 12px 20px;
            border-radius: 4px;
            cursor: pointer;
            font-size: 16px;
            width: 100%;
            margin-top: 10px;
        }
        .submit-btn:hover {
            background-color: #2980b9;
        }
        .links {
            margin-top: 20px;
            text-align: center;
        }
        .footer {
            margin-top: 30px;
            text-align: center;
            font-size: 14px;
            color: #7f8c8d;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>登录页面</h1>
        
        <form>
            <div class="form-group">
                <label for="username">用户名:</label>
                <input type="text" id="username" name="username" class="submit-btn" placeholder="输入用户名">
            </div>
            
            <div class="form-group">
                <label for="password">密码:</label>
                <input type="password" id="password" name="password" class="submit-btn" placeholder="输入密码">
            </div>
            
            <button type="submit" class="submit-btn">登录</button>
        </form>
        
        <div class="links">
            <a href="#">忘记密码?</a> | 
            <a href="#" id="registerLink">点击这里注册</a> | 
            <a href="#">联系我们</a>
        </div>
        
        <div class="footer">
            <p>© 2023 示例公司. 所有权利保留.</p>
        </div>
    </div>
</body>
</html>

image-20250905上午93828283

元素定位

1、通过 ID 定位

通过元素的 id 属性定位。id属性几乎是唯一,定位会非常准确

语法:find_element(By.ID, "id_value")

实现代码:

from selenium.webdriver.common.by import By

element = driver.find_element(By.ID, "username")
2、通过 Name 定位

通过元素的 name 属性定位。前提是元素有name属性

语法:find_element(By.NAME, "name_value")

实现代码:

element = driver.find_element(By.NAME, "password")
3、通过 Class 定位

通过元素的 class 属性定位。但一般class属性不会唯一

语法:find_element(By.CLASS_NAME, "class_name")

代码实现:

element = driver.find_element(By.CLASS_NAME, "submit-btn")
4、通过 Tag Name 定位

通过元素的标签名定位(如

、 等)。非常快速找到同类标签

语法:find_element(By.TAG_NAME, "tag_name")

代码实现:

 element = driver.find_element(By.TAG_NAME, "input")
5、通过 CSS 选择器定位

通过 CSS 选择器定位元素。功能强大,写法灵活,强烈推荐!(可直接浏览器右键复制,简单易上手)

语法:find_element(By.CSS_SELECTOR, "css_selector")

代码实现:

 element = driver.find_element(By.CSS_SELECTOR, "input#username")
6、通过 XPath 定位

通过 XPath 表达式定位元素。比CSS稍微复杂,但几乎没有它搞不定的定位,强烈推荐!(可直接浏览器右键复制,简单易上手,但可能因为定位过长导致失败)

语法:find_element(By.XPATH, "xpath_expression")

代码实现:

 element = driver.find_element(By.XPATH, "//input[@id='username']")
7、通过 Link Text 定位

通过链接的文本内容定位(适用于 标签)

语法:find_element(By.LINK_TEXT, "link_text")

代码实现:

 element = driver.find_element(By.LINK_TEXT, "Click Here")
8、通过 Partial Link Text 定位

通过链接的部分文本内容定位(适用于 标签)。算是Link Text定位的简化版

语法:find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")

代码实现:

 element = driver.find_element(By.PARTIAL_LINK_TEXT, "Click")
特殊:多个元素定位

有时无论如何修改定位,元素始终有多个,Selenium 提供了 find_elements 方法,返回一个元素列表,而不是直接返回元素(可以解决老大难的问题,尤其在vue等前端框架下非常好用)

语法: find_elements_by_class_name("class_value")

代码实现:

elements = driver.find_elements_by_class_name("csu")
元素定位黄金法则
  • 尽量使用 idname 等唯一属性定位元素

  • 如果元素属性是动态生成的(如随机 ID),不要使用这些属性定位

  • 使用代码等待确保元素加载完成后再进行操作

在我们实际的项目中使用最多的是CSS和XPath定位,由于现在vue等前端框架的使用,ID,name等属性都是由框架进行动态生成,所以使用CSS和XPath的组合定位会比较准确和简单一些。

描述

网站公告

今日签到

点亮在社区的每一天
去签到