Selenium 八大定位方法
在进行 Web 自动化测试时,最核心的一件事就是 定位页面元素。元素定位写得好,脚本稳定不易坏;写不好,自动化就会频繁失败。
Selenium 提供了 八种定位方式。
🌟 1. ID 定位(最优先推荐)
ID 在页面中通常是唯一的,是最稳定、最快速的定位方式。
element = driver.find_element(By.ID, "username")
适用场景: 元素的 ID 明确且稳定
优点: 唯一、快速、维护成本低
缺点: 部分页面无 ID 或 ID 会动态变
🌟 2. Name 定位
使用元素的 name 属性定位,适合表单类元素。
element = driver.find_element(By.NAME, "password")
优点: 易读,常用于表单
缺点: name 不一定唯一
🌟 3. Class Name 定位
通过 class 属性定位。
element = driver.find_element(By.CLASS_NAME, "login-btn")
注意:class 名字不能包含空格!
遇到多个 class 需用 Xpath / CSS 处理。
🌟 4. Tag Name 定位
使用 HTML 标签名,例如:input, button, div。
elements = driver.find_elements(By.TAG_NAME, "input")
适用场景: 想批量获取元素(如所有输入框)
不适合单个元素精确定位
🌟 5. Link Text 定位(超常用)
使用超链接 <a> 的文本完整匹配。
driver.find_element(By.LINK_TEXT, "点击这里注册").click()
适用场景: 页面上明确可见的链接文字
缺点: 文本稍微变一下就定位不到
🌟 6. Partial Link Text(模糊匹配)
超链接文本支持部分匹配。
driver.find_element(By.PARTIAL_LINK_TEXT, "注册").click()
适合长文本或文本动态变化的链接
🌟 7. CSS Selector 定位(强烈推荐)
driver.find_element(By.CSS_SELECTOR, "#username") driver.find_element(By.CSS_SELECTOR, ".btn.primary")
driver.find_element(By.CSS_SELECTOR, "input[type='password']") driver.find_element(By.CSS_SELECTOR, "div > span.item")
CSS 定位的优势:
速度快
可读性好
灵活强大(适合复杂层级定位)
前端工程师都用它,兼容性最好
掌握 CSS,你会比只会写 Xpath 的测试更强。
🌟 8. XPath 定位(最强、最灵活)
XPath 能定位几乎任何元素,是 Selenium 最强大的定位方式。
✔ 基本写法
driver.find_element(By.XPATH, "//input[@id='username']")
✔ 多属性定位
driver.find_element(By.XPATH, "//button[@class='btn' and @type='submit']")
✔ 模糊匹配(包含)
driver.find_element(By.XPATH, "//a[contains(text(), '注册')]")
✔ 相对路径(兄弟节点)
driver.find_element(By.XPATH, "//label[text()='用户名']/following-sibling::input")
优点: 强大无敌,啥都能定位
缺点: 可读性差、层级写不好容易很长
建议: 必要时使用,不要滥用
