Selenium之八大定位

八大定位

今天我们来学一学,selenium有名的八大定位方式;都有哪八个呢,下面我先列出来;之后再一个一个的实践

  • id,通过id定位元素
  • name,通过name定位
  • class_name,通过class类名定位
  • tag_name,通过标签名称
  • link_text,通过链接文本
  • partial_link_text,通过部分链接文本
  • xpath,通过xpth定位元素
  • css_selector,通过css选择器

以上就是著名的八大定位,下面就让我们一个一个的看,具体是怎么个一回事

ID

最快速、可靠的定位方式;当元素有唯一id时候

复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# broswer = webdriver.Chrome()
serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
service = Service(serve_path)
browser = webdriver.Chrome(service=service)
# 访问网站
browser.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html')
# + id,通过id定位元素,可以看到是一个输入框 
element = browser.find_element(By.ID, 'lname')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name) # input
name
复制代码
element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name)  # input
class_name

适合通过class名定位,但是需要注意class不是唯一的,可能会有多个

复制代码
# 先通过name定位输入框,输入东西后;点击百度首页按钮
element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
element = browser.find_element(By.CLASS_NAME, 'toindex')
element.click()
time.sleep(5)
tag_name

通过HTML的标签名定位,一般需要结合其他条件

复制代码
# 可以看到先通过定位左上角的id;后面再使用find_elements;找到a标签的列表集合
# 最后再循环遍历出来,每一个标签的href链接
# 注意:find_elements只有当找到的元素多个的时候,才可以使用;
# 可以直接后面加下标使用;前提是要知道所在位置
elements = browser.find_element(By.ID, 's-top-left').find_elements(By.TAG_NAME, 'a')
for element in elements:
    print(element.get_attribute('href'))
time.sleep(5)

用于定位超链接文本(完全匹配)

复制代码
# 可以看到,点击了新闻的跳转
element = (browser.find_element(By.LINK_TEXT, '新闻')
           .click())
time.sleep(5)

超链接文本的部分匹配

复制代码
# 可以看到,跳转到了hao123页面
element = (browser.find_element(By.PARTIAL_LINK_TEXT, 'hao')
           .click())
time.sleep(5)
xpath

最灵活的定位方式,适合复杂场景;xpath的内容,后面会单独讲一篇文章了;

复制代码
element = browser.find_element(By.XPATH, '//*[@id="kw"]')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name)  # input
css_selector

通过css选择器来进行定位,常用的有以下几种

  • #kw;意思是使用了id选择器

  • .toindex;意思是class选择器

  • input[name="wd"];属性选择器;意思是选择name="wd"的input标签

    #kw;可以看到,也是定位到了输入框

    element = browser.find_element(By.CSS_SELECTOR, '#kw')

    element = browser.find_element(By.CSS_SELECTOR, '.s_ipt')

    element = browser.find_element(By.CSS_SELECTOR, 'input[name="wd"]')

    element.send_keys('selenium')
    time.sleep(5)
    print(element.tag_name) # input

好了,八大定位都实践完毕了;但是其中出现了一些新的知识点;比如xpath,它的内容都需要单独讲一下

还有下面这个有没有s的区别

find_element和find_elements的区别详解

在 Selenium 中,find_elementfind_elements 是两种主要的元素定位方法,它们有以下关键区别:

核心区别对比

特性 find_element find_elements
返回值类型 返回单个 WebElement 对象 返回 WebElement 对象的列表
未找到元素时行为 抛出 NoSuchElementException 异常 返回空列表 []
使用场景 确定唯一存在的元素 查找多个相同特征的元素
方法后缀 单数形式 (element) 复数形式 (elements)

何时使用哪种方法?

使用 find_element 当:

  • 你确定页面上只有一个匹配元素
  • 元素是唯一标识的(如通过ID)
  • 如果元素不存在应该立即报错

使用 find_elements 当:

  • 需要获取多个相似元素(如所有表格行、所有图片)
  • 需要检查元素是否存在而不引发异常
  • 处理动态内容时更安全

八大定位讲完了,下一篇就讲一下Element的常见属性和方法

相关推荐
小冯的编程学习之路1 小时前
【软件测试】:推荐一些接口与自动化测试学习练习网站(API测试与自动化学习全攻略)
c++·selenium·测试工具·jmeter·自动化·测试用例·postman
Ten peaches3 小时前
Selenium-Java版(操作元素)
java·selenium·测试工具·html
傻小胖6 小时前
三种常见接口测试工具(Apipost、Apifox、Postman)
测试工具·postman
辛普森Mmmm9 小时前
Postman接口测试
测试工具·postman
程序员三藏10 小时前
软件测试之功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
Looooking13 小时前
Python 之 selenium 打开浏览器指定端口进行接续操作
python·selenium
头疼的程序员1 天前
allure生成测试报告(搭配Pytest、allure-pytest)
测试工具·pytest
程序员杰哥1 天前
自动化测试基础知识详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
程序员小远2 天前
自动化测试与功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
第三方软件测评3 天前
第三方软件测评中心分享:软件功能测试类型和测试工具
功能测试·测试工具