• selenium 元素定位


    概述

    一个页面最基本组成单元是元素,想要定位一个元素,我们需要特定的信息来说明这个元素的唯一特征。在selenium中,有8种定位到具体元素的方法。如下表所示:

    定位器 Locator描述
    class定位class属性与搜索值匹配的元素(不允许使用复合类名)
    css selector定位 CSS 选择器匹配的元素
    id定位 id 属性与搜索值匹配的元素
    name定位 name 属性与搜索值匹配的元素
    link text定位link text可视文本与搜索值完全匹配的锚元素
    partial link text定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。
    tag name定位标签名称与搜索值匹配的元素
    xpath定位与 XPath 表达式匹配的元素

    方法

    假设我们的网页由以下部分组成,这里尽可能使网页内容简单,来具体的介绍各个方法的不同。

    <ol id="vegetables">
     <li class="onions"><span>Onion is a Vegetable</span></li>
     <li class="tomatoes"><span>Tomato is a Vegetable</span></li>
    </ol>
    <ul id="fruits">
      <li class="apples"><span>Apple is a Fruit</span></li>
      <li class="tomatoes"><span>Tomato is a Fruit</span></li>
    </ul>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    根据class属性定位

    # 定位网页中class为tomatoes的元素,网页中符合条件的有两个,但是该方法只返回第一个
    driver.find_element(By.CLASS_NAME, "tomatoes")
    
    # 如果需要返回所有的元素,则需要使用find_elements方法
    driver.find_elements(By.CLASS_NAME, "tomatoes")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    根据id属性定位

    # 在HTML种,由于id相同的两个元素不存在,故不需要find_elements方法
    driver.find_element(By.ID, "fruits")
    
    • 1
    • 2

    根据css选择器定位

    # 在这种定位方式中,功能更加强大,定位更加灵活,但需要掌握css语法
    driver.find_element(By.CSS_SELECTOR, '#fruits .tomatoes')
    
    • 1
    • 2

    根据tag name定位

    # 根据标签的名字,这里是根据<li></li>标签来定位的
    driver.find_elements(By.TAG_NAME, "li")
    
    • 1
    • 2

    根据name属性定位

    name属性一般用于表单中,服务器通过name属性来获取具体元素的值。

    # 查找name属性为inp的表单
    driver.find_elements(By.NAME, "inp")
    
    • 1
    • 2

    根据link text定位

    该种定位方式需要元素的内容与输入的内容完全匹配。

    # 定位文本为Tomato is a Vegetable的所有元素
    driver.find_elements(By.LINK_TEXT, "Tomato is a Vegetable")
    
    • 1
    • 2

    根据partial link text定位

    该种定位方式只需要元素的内容与输入的内容部分匹配即可定位到相应元素。

    # 定位文本中含有Tomato的所有元素
    driver.find_elements(By.PARTIAL_LINK_TEXT, "Tomato")
    
    • 1
    • 2

    根据xpath定位

    # 根据xpath表达式来定位元素
    driver.find_elements(By.XPATH, "/ol/li")
    
    • 1
    • 2
  • 相关阅读:
    LeetCode题目笔记——1710. 卡车上的最大单元数
    【Mybatis源码】XPathParser解析器
    【线性表】—不带头单向非循环链表的增删查改
    LeetCode——动态规划篇(二)
    【C语言】数据结构的基本概念与评价算法的指标
    07-JS时间对象
    小满nestjs(第七章 RESTful 风格设计)
    十分钟学会Golang开发gRPC服务
    OpenFeign简介,负载策略
    类加载子系统
  • 原文地址:https://blog.csdn.net/weixin_49346755/article/details/125609543