ui自动化中,selenium进行元素定位,以及CSS,xpath定位总结

几种定位方式

简单代码

from selenium import webdriver
import time# 创建浏览器驱动对象
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()            # 参数写浏览器驱动文件的路径,若配置到环境变量就不用写了
# 访问网址
driver.get("https://www.baidu.com/")#找到输入搜素框
inpEle = driver.find_element(By.ID,"kw")
inpEle.send_keys("海康交通大数据")# 找到搜索按钮
sEle = driver.find_element(By.ID,"su")
sEle.click()# 退出浏览器
# driver.quit()

By中有8个,定位方式

  •         使用class_name 时 如果遇到多个class值有多个情况的,选择其中之一
  •         link_text 是用在a标签的
  •         xpath , 两个// ,表示找后代,相对路径,  / 表示找儿子, 全路径

id ,class_name, name 底层都是css

如下图的源码可知: id ,class_name, name 底层都是css

find_element 和 find_elements 区分

通过find_element 来找   

  • 找不到会报错
  • 如果能匹配多个,匹配到第一个就找一个

find_elements, 返回的是列表

写法变形(后面框架要用到)

本来是这么写的

变成这么写, 把元素独立出来。就可以单独维护

ele = ('id','kw')driver.find_element(*ele)

css-selector 定位

1234  (直接连起来是and关系, 如果是  用(逗号)分割,就是or关系 ),and时顺序是1234

  • 1.根据标签   P
  • 2.根据id      #id    (12结合写法    P#id)
  • 3.根据class   .class1.class2
    • 如果是xpth和 css 属性值写法,属性值要把 空格带上,写完整 【属性=“值 值”】时
    • 另外补充:如果是By.CLASS_NAME ,定位方式, 多个class,也只能写一个
  • 4.根据属性 ["属性"=“属性值”]
    • 不常规 [属性] (补充:不写值,表示有此属性的)
    • 常用 input[id="username"] + 加上标签更容易唯一 属性可以模糊匹配属性值如下图
    • input[class="class1 class2"])
    • 还能模糊,包含[*=],开头是[^=],结尾是[$=]
  • 根据路径
    • 空格 后代                 如:#kw p 找后代的p标签 空格 (表示在某一节点 后代里去找 p)
    • > 找儿子                   如:#a1 > p 儿子选择器 > 大于 (补充 >* 表示所有儿子, 空格* 表示所有后代)
    • + 找二弟 (找相邻弟弟) 如 :#ab1 + li 选择相邻弟弟 + (补充:+p 表示紧挨着的是p才能找到,p如果没有紧挨着还找不到)
    • ~ 找同级弟弟 如:#ab2 ~ li 选择所有亲弟弟 ~ (补充 ~ * 表示所有的弟弟)
  • 伪类选择器:(常用的三个)
    • :nth-child(n) 表示找结果的第几个:如:p:nth-child(1) # 第一个p
    • :first-child 结合 > ,可以用来查某个标签儿子中的大儿子 div>:first-child
    • :last-child
    • 补充:
    • :nth-of-type(1) 表示某种类型的第一个?
    • :not(p) 不要某种标签 (括号里可以写标签,或者.classsname, # id )

用css定位时补充:假如id为数字开头

        #id #id值,这种不行

        [id="31qvvq"] # css的属性值定位是可以的

Xpath定位

/ 一个表示一层一层往下找 (儿子中找)

// 两个表示从后代找 (后代中找)

只有两种情况,我会用xpath

       a. 想用多个属性,    //input[@id='kw' and @class]

         b .想用文本来取时  //*[text(),"文本"] //*[contains(text(),"文本")]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…

基于标定数据将3D LiDAR点云与相机图像对齐(含C++版本代码)

这段C代码演示了如何将Velodyne激光雷达的点云数据投影到相机图像上。该过程涉及以下主要步骤: 读取并解析来自文件的标定数据,包括P2矩阵、R0_rect矩阵和Tr_velo_to_cam矩阵。这些矩阵用于将激光雷达点云从Velodyne坐标系转换到相机坐标系。从二进制文件中读取Velo…

找素数第二、三种方法

文章目录 第一种 :使用标签第二种:本质是方法的分装 第一种 :使用标签 没有使用信号量。break和continue作用范围只是最近的循环,无法控制外部循环。 此时使用标签 对外部循环进行操作。 package com.zhang; /* 找素数 第二种方…

MySQL—多表查询—外连接

一、引言 学到内连接,它是查询的数据两张表交集的部分。而接下来看看外连接。 外连接查询语法:(分为两种) 1、左外连接 语法结构: 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...; ( ... left out join on ...) 注意&#x…

三、安全工程练习题(CISSP)

1.三、安全工程练习题(CISSP)

WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程

说起来有关 WordPress 缓存插件明月已经发表过不少文章了,但有关 W3 Total Cache Pro 这个 WordPress 高级缓存插件除了早期【网站缓存插件 W3 Total Cache,适合自己的才是最好的!】一文后就很少再提及了,最近因为明月另一个网站【玉满斋】因为某些性能上的需要准备更换缓存…

java —— 线程(一)

一、进程与线程 一个进程可以包含一个以上的线程,CPU 时间片切换的基本单位是线程。 二、创建线程 (一)继承 Thread 类 public class Task extends Thread{Override //重写run方法public void run(){System.out.pr…

当前 Python 版本中所有保留字keyword.kwlist

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 当前 Python 版本中 所有保留字 keyword.kwlist [太阳]选择题 根据给定的Python代码,哪个选项是正确的? import keyword print("【执行】keyword.kwlist"…

shell编程(四)—— 运算符

和其他编程语言一样,bash也有多种类型的运算符,本篇对bash的相关运算符做简单介绍。 一、运算符 1.1 算术运算符 常见的算术运算符,如加()、减(-)、乘(*)、除&#xf…

【网络架构】Nginx

目录 一、I/O模型 1.1 Linux 的 I/O 1.2 零拷贝技术 1.3 网络IO模型 1.3.1 阻塞型 I/O 模型(blocking IO)​编辑 1.3.2非阻塞型 I/O 模型 (nonblocking IO)​编辑 1.3.3 多路复用 I/O 型 ( I/O multiplexing )​编辑 1.3.4 信号驱动式 I/O 模型 …

Python 学习flask创建项目

1、使用pycharm创建flask项目 2、运行访问地址 3、可以看到访问地址内容 4、可以增加路由,尝试访问获取参数

智能电网与微电网:引领电力未来的创新力量

随着能源需求持续增长和环保压力日益加大,电力行业正面临前所未有的挑战与机遇。在这一背景下,智能电网和微电网作为新兴的技术应用方向,以其独特的优势和潜力,正逐步成为推动电力领域可持续发展的关键力量。 智能电网&#xff0…

【车载开发系列】MCU选型

【车载开发系列】MCU选型 【车载开发系列】MCU选型 【车载开发系列】MCU选型一. 重要概念二. MCU选型的风险风险1风险2 三. MCU选型要点四. MCU选型维度五. MCU 选型需要考虑的因素1)ROM/RAM2)速度/主频3)分析外设需求4)工作电压(…

设计模式- 责任链模式(行为型)

责任链模式 责任链模式是一种行为模式,它为请求创建一个接收者对象的链,解耦了请求的发送者和接收者。责任链模式将多个处理器串联起来形成一条处理请求的链。 图解 角色 抽象处理者: 一个处理请求的接口,可以通过设置返回值的方…

codesys【CAN总线】

1下载设备描述文件: 必须下载设备描述文件,要不然编程软件无法正确组态。 根据实际设备【品牌】去官网搜索下载。 以 DMA882-CAN 为例 CAN的设备描述文件是【.eds】的扩展名 安装设备描述文件。 2添加CAN总线: 1添加【CAN总线】&#xff1a…

同盾中文点选验证码识别方法

中文验证码一直是识别的难题,首先他分类的种类很多,常见中文都有3500个,而且一般中文验证码都会有变形,导致每一个文字都需要大量训练样本。假设每一个汉字样本需要100个,100350035万个样本,所以标记的样本…

excel拖拽怎么使单元格序号不递增

拖拽下来不仅不递增,而且右下角没有倒三角可以设置改变,(即没有下图这个) 则,可以采用以下方法 excel数值拖拽不递增还有一个更快更快捷的方法,这就运用到了excel快捷键,我们把鼠标放到单元格的…

IP分片的隐患,以及TCP分片

好的,我们来用一个生活中的例子更详细地解释 MTU、MSS,以及 IP 和 TCP 分片。 MTU 和 MSS 的概念 MTU(Maximum Transmission Unit,最大传输单元): 假设你搬家,需要用卡车搬运家具。 卡车的最…

Hadoop 2.0:主流开源云架构(一)

目录 一、引例(一)问题概述(二)常规解决方案(三)分布式下的解决方案(四)小结 自从云计算的概念被提出,不断地有IT厂商推出自己的云计算平台,但它们都是商业性…

Suno小技巧大揭秘,不会这些技巧别说你懂AI音乐

Suno是一个强大的AI音乐生成工具,它不仅可以帮你快速生成音乐,还能精确地根据你的需求进行调整。无论你是音乐小白还是专业音乐人,这篇文章将揭示一些鲜为人知的Suno技巧,帮助你最大化利用这个工具的潜力。 技巧一:精准…