Web自动化元素定位

2023-11-17

 

元素定位就是通过元素的信息或元素层级结构来定位元素。要使用Web自动化操作元素,必须首先找到此元素。

1 元素定位方式

1.1 基于元素属性特有的定位方式

(1)id: element = driver.find_element_by_id(id)

id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的。

(2)name: element = driver.find_element_by_name(name)

name定位就是根据元素name属性来定位。HTML文档中name的属性值是可以重复的

(3)class_name: element = driver.find_element_by_class_name(class_name)

class_name定位就是根据元素class属性值来定位元素。HTML通过class来定义元素的样式。如果class有多个属性值,只能使用其中的一个。

1.2 基于元素标签名称定位

<span style="background-color:#f8f8f8"><span style="color:#333333">tag_name: element = driver.find_element_by_tag_name(tag_name)
</span></span>

tag_name定位就是通过标签名来定位,HTML本质就是由不同的tag组成, 每一种标签一般在页面中会存在多个,所以不方便进行精确定位,一般很少使用,如果存在多个相同标签,则返回符合条件的第一个标签。

1.3 基于超链接文本

(1)link_text: element = driver.find_element_by_link_text(超链接的全部文本内容)

link_text定位是专门用来定位超链接元素(<a>标签</a>), 并且是通过超链接的文本内容来定位元素

(2)partial_link_text: element = driver.find_element_by_partial_link_text(这里可以是a标签的部分文本内容)

1.4 基于元素路径xpath的定位策略

XPath即为XML Path的简称,是一门在 XML 文档中查找元素信息的语言。HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在Web应用中定位元素。XML是一种后缀名为.XML的标记语言,用于数据的存储和传递。

定位方法: element = driver.find_element_by_xpath(xpath)

1.4.1 路径定位

(1)绝对路径定位:从最外层元素到指定元素之间所有经过元素层级的路径

绝对路径以/html根节点开始, 使用/来分隔元素层级;如: /html/body/input;绝对路径对页面结构要求比较严格,一般不使用绝对定位

(2)相对路径定位:匹配任意层级的元素,不限制元素的位置

相对路径以//开始,如: //input 或者 //*

1.4.2 元素属性定位

//任意节点[@属性=‘属性值’] or //*[@属性=属性值]

扩展:

  • //包括有文本信息的节点[contains(text (),‘文本信息’)],如表达式://a[contains(text(),‘新闻活动’)]

  • 属性中含有xxx的元素://*[contains(@属性名,‘XXX’)]

  • 属性以xxx开头的元素://*[starts-with(@属性名,‘XXX’)]

1.4.3 属性与逻辑结合定位

//*[@属性名1='属性值1 and @属性名2=‘属性值2’]

解决元素之间个相同属性重名问题

1.4.4 层级与属性结合定位

//*[@属性名=‘属性值’]/标签等

若通过元素自身属性不方便直接定位到该元素,则可以先定位到其父级元素,然后再找到该元素

1.5 基于选择器css的定位策略

在selenium中,CSS定位比XPath定位速度要快,推荐使用。

定位方法: element = driver.find_element_by_css_selector(css_selector)

1.5.1 id选择器: #id属性值

1.5.2 class选择器: .class属性值

1.5.3 元素选择器: 标签名

根据元素的标签名选择,如:input

1.5.4 属性选择器:[属性名=属性值] 或 标签名[属性名=属性值]

根据元素的属性名和值来选择,如:[type=“password”]

扩展:

  • 某属性以某字母开头的元素:标签名[属性名^=‘属性值’]

  • 某属性以某字母结束的元素:标签名[属性名$=‘属性值’]

  • 某属性包含某字母的元素:标签名[属性名*=‘属性值’]

1.5.4 层级选择器

根据元素的父子关系来选择。

格式1: 元素1>元素2,通过元素1来定位元素2,并且元素2必须为元素1的直接子元素,如:p[id=‘p1’]>input (定位指定p元素下的直接子元素input)

格式2: 元素1 元素2,通过元素1来定位元素2,并且元素2为元素1的后代元素,如:p[id=‘p1’] input(定位指定p元素下的后代元素input)

1.6 定位一组元素

get_elements_by_xxx()

返回的定位元素格式为列表,通过指定下标读取列表中的数据。

1.7 定位工具:火狐插件chropath

step1: 在火狐浏览器中搜索并安装插件ChroPath

step2: 打开开发者工具,点击ChroPath,之后点击箭头小图标,鼠标移动到页面上选择需要执行操作的元素

step3: 在ChroPath面板中选择元素定位策略

step4: 查看元素路径

2 常见问题解决方案:

2.1 问题1:提示错误: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead

解决方法:

step1: 导入By类:from selenium.webdriver.common.by import By

<span style="background-color:#f8f8f8"><span style="color:#333333">class By(object):
    """
    Set of supported locator strategies.
    """
    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"
</span></span>

step2: 更改元素定位语句为:driver.get_Element(By.ID,“id名”)NAME,CLASS_NAME,XPATH等写法一样find_element_by_id底层实现方法是调用find_element方法进行的封装。

<span style="background-color:#f8f8f8"><span style="color:#333333">def find_element_by_id(self, id_):
    """Finds an element by id.
    :Args:
    - id\_ - The id of the element to be found.
    :Usage:
    driver.find_element_by_id('foo')
    """
    return self.find_element(by=By.ID, value=id_)</span></span>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web自动化元素定位 的相关文章

随机推荐

  • 云原生之使用Docker部署Magma导航页

    云原生之使用Docker部署Magma导航页 一 Magma导航页介绍 1 1 Magma导航页简介 1 2Magma导航页特点 二 本地环境介绍 2 1 本地环境规划 2 2 本次实践介绍 三 本地环境检查 3 1 检查Docker服务状
  • 扛住阿里双十一高并发流量,Sentinel是怎么做到的?

    Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案 Sentinel 功能 原理 架构 快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 当系统资源不够 不足以应对大量请求 对系统
  • # winform实现一个服务端和多个客户端进行通信

    参看此链接 http www cnblogs com longwu archive 2011 08 25 2153636 html 在上述代码的基础上进行了修改 包括一些捕获异常以及按钮的应用 扩充了一个listbox确保服务端可以选择和不
  • linux echo输出转义换行回车引号

    echo 输出引号的正确格式 echo 123 echo 123 echo 输出回车换行 制表符的正确格式 echo e n123 echo e n123 echo e t123 echo e t123 输出结果
  • springboot使用pagehelper进行分页

    上次的博客项目 使用到了分页 这里总结一下 1 项目环境 IDE IDEA 语言 java 框架 springboot 模板引擎 thymeleaf 2 效果 3 pom xml
  • 贪吃蛇视频教程

    http gameinstitute qq com lore catalog 10017
  • nvm切换node版本

    nvm是一个node的版本管理工具 可以简单操作node版本的切换 安装 查看等等 与npm不同的是 npm是依赖包的管理工具 nvm 主要为了解决 node js 各种版本存在不兼容现象 1 下载 可去github上下载相关版本 链接地址
  • cmd命令解密Bitlocker

    解锁 manage bde unlock C Recovery 加锁 manage bde lock C 解密 manage bde off C 加密 manage bde on C C表示解锁的盘符 解密需要一定时间 可以用manage
  • 利用python拼接图片代码_Python实现图片拼接的代码

    具体代码如下所示 import os from PIL import Image UNIT SIZE 220 the size of image save path root group dia zxb Code lip CycleGAN
  • python PriorityQueue遍历

    要写一段遍历PriorityQueue中每个元素的代码 去网上找到的都是for循环 get 但是这样会把PriorityQueue中的元素取出来 得 问了chatGPT 没想到真有用 from queue import PriorityQu
  • Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释 decode 条件 值1 返回值1 值2 返回值2 值n 返回值n 缺省值 该函数的含义如下 IF 条件 值1 THEN RETURN 翻译值1 ELSIF 条件 值2 THEN RETU
  • 最新QQ强制搜索Api接口

    强制搜索QQ接口 QQ隐藏搜索不到的把他QQ放在 后面然后直接搜索链接就可以搜索到了 QQ设置了隐藏无法搜索使用这个隐藏都不管用的 进入官网 https apis hackeus cn 找到强制搜索接口点进去 后面输入QQ号即可
  • 用户账户控制(无法截图/退出全屏/使用窗口模式)

    用户账户控制提示框无法截图 这是我遇到的问题 如下 就是这种对话框 一般是程序请求管理员权限运行 就会弹出 默认是全屏状态 无法截图 试过什么PrintScreen等均不行 这里提供一个办法 把该提示框改变为窗口模式 而非全屏 就可以使用截
  • 数据结构--二叉堆与优先队列

    堆的一些性质 1 堆是一颗完全二叉树 2 堆的顶端一定是 最大 最小 的 但是要注意一个点 这里的大和小并不是传统意义下的大和小 它是相对于优先级而言的 3 堆一般有两种样子 小根堆和大根堆 分别对应第二个性质中的 堆顶最大 堆顶最小 对于
  • 毕业设计 - 基于云平台的火灾报警器 - stm32 物联网 单片机 OneNET云平台

    文章目录 0 简介 1 项目简介 2 开发环境 3 火焰传感器 4 连接OneNET云平台 5 演示效果 6 最后 0 简介 Hi 大家好 学长今天向大家介绍一个 单片机项目 基于云平台的火灾报警器 stm32 物联网 单片机 OneNET
  • 【linux kernel】挂载根文件系统之rootfs

    挂载根文件系统之rootfs 文章目录 挂载根文件系统之rootfs 一 开篇 二 rootfs根文件系统 2 1 初始化rootfs 2 2 挂载rootfs文件系统 2 3 创建简单的rootfs根文件系统目录和文件 2 4 打开0 1
  • [Python系列-27]:命令行解析器argparse详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122276305 目录 第1章 arg
  • GB/T28181-2022相对2016版“基于TCP协议的视音频媒体传输要求“规范解读和技术实现

    规范解读 GB T28181 2022和GB T28181 2016规范 有这么一条 更改了附录 D 基于 TCP 协议的视音频媒体传输要求 见附录 D 2016 年版的附录 L 本文主要是针对GB T28181 2022里面提到的 基于
  • 【Java】Excel中添加下拉框

    0 两种方式 有两种方式可以实现 我仅在此记录一下 POI Hutool 1 使用 POI import org apache poi ss usermodel DataValidation import org apache poi ss
  • Web自动化元素定位

    元素定位就是通过元素的信息或元素层级结构来定位元素 要使用Web自动化操作元素 必须首先找到此元素 1 元素定位方式 1 1 基于元素属性特有的定位方式 1 id element driver find element by id id i