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

几种定位方式

简单代码

from selenium import webdriver
import time

# 创建浏览器驱动对象
from selenium.webdriver.common.by import By

driver = 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(),"文本")]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JDBC简介以及快速入门

这些都是JDBC提供的API 简介 每一个数据库的底层细节都不一样 不可能用一套代码操作所有数据库 我们通过JDBC可以操作所有的数据库 JDBC是一套接口 我们自己定义了实现类 定义实现类 然后就能用Java操作自己的数据库了 MySQL对于JDBC的实现类 就是驱动 快速入门 创建新的项…

冯喜运:6.10周一黄金还会再次拉升吗?日内黄金原油操作策略

【黄金消息面分析】:周一(6月10日)亚市盘中,现货黄金交在上周五暴跌后仍然承压,目前金价位于2294美元/盎司左右。因强劲非农数据刺激美元大涨,现货黄金上周五出现暴跌。此外,上周五数据显示,最大黄金消费国…

Duck Bro的第512天创作纪念日

Tips:发布的文章将会展示至 里程碑专区 ,也可以在 专区 内查看其他创作者的纪念日文章 我的创作纪念日第512天 文章目录 我的创作纪念日第512天一、与CSDN平台的相遇1. 为什么在CSDN这个平台进行创作?2. 创作这些文章是为了赚钱吗&#xff1f…

基于运动控制卡的圆柱坐标机械臂设计

1 方案简介 介绍一种基于运动控制卡制作一款scara圆柱坐标的机械臂设计方案,该方案控制器用运动控制卡制作一台三轴机械臂,用于自动抓取和放料操作。 2 组成部分 该机械臂的组成部分有研华运动控制卡,触摸屏,三轴圆柱坐标的平面运…

MySQL时间和日期类型详解(零基础入门篇)

目录 1. DATE 2. DATETIME 3. TIMESTAMP 4. TIME 5. YEAR 6. 日期和时间的使用示例 以下SQL语句的测试可以使用命令行,或是使用SQL工具比如MySQL Workbench或SQLynx等。 在 MySQL 中,时间和日期数据类型用于存储与时间相关的数据,如何…

【西瓜书】大题

1.线性回归 思路:ywxb,w为一维数组,求均方误差MSE,对w和b分别求偏导为0得到关于w和b的闭式求解。预测第十年的代入ywxb求解即可。 2.查准率、查全率 思路:先计算每个算法测试结果的混淆矩阵,再根据混淆矩阵…

C语言最终讲:预处理详解

C语言最终讲:预处理详解 1.预定义符号2.#define定义常量3.#define定义宏4.带有副作用的宏参数5.宏替换的规则6.宏和函数的对比6.1宏的优势6.1.1\符号 6.2宏的劣势 7.#和##7.1#运算符7.2##运算符 8.命名约定9.#undef10.命令行定义11.条件编译12.头文件的包含12.1本地…

OpenAI 推出适用于 .NET 的 OpenAI 库

OpenAI 推出适用于 .NET 的 OpenAI 库 微软最近宣布推出面向.NET开发人员的官方OpenAI库,该库支持OpenAI的全套API和最新的GPT-4o旗舰模型。这个模型可以实时进行音频、视觉和文本推理。 OpenAI .NET API库 目前,微软已经发布了OpenAI .NET API库的第一…

树二叉树

树 ​ 树是 n(n≥0)个结点的有限集。当 n 0时,称为空树。在任意一颗非空树中应满足: (1)有且仅有一个特定的称为根的结点。 (2)当 n > 1时,其余结点可分为 m&…

bitset用法

参考:https://blog.csdn.net/weixin_45697774/article/details/105563993 题目:https://leetcode.cn/problems/maximum-total-reward-using-operations-ii/description/ class Solution { public:int maxTotalReward(vector<int>& rewardValues) {bitset<10000…

未卸载干净的proteus安装教程7.8

提醒&#xff1a; 针对第一次安装推荐博文&#xff1a;https://jingyan.baidu.com/article/656db918f8590de381249cbf.html 1、一定要以管理员身份运行软件。 2、以管理员身份运行软件后&#xff0c;默认的ISIS Professional路径是C:\Program Files \Labcenter Electronics\…

写给大数据开发,如何去掌握数据分析

这篇文章源于自己一个大数据开发&#xff0c;天天要做分析的事情&#xff0c;发现数据分析实在高大上很多&#xff0c;写代码和做汇报可真比不了。。。。 文章目录 1. 引言2. 数据分析的重要性2.1 技能对比2.2 业务理解的差距 3. 提升数据分析能力的方向4. 数据分析的系统过程4…

初识springclould到生产者消费者的RPC通信

SpringClould SpringBoot和SpringClould搭建springcloud创建项目管理实体类模块服务提供者模块消费者 Eureka 服务注册与发现 SpringBoot和SpringClould springboot和springclould都是spring系列的衍生品&#xff0c;都可以在spring的官网找到对应的参考文档和学习路线以及核心…

PHP“well”运动健身APP-计算机毕业设计源码87702

【摘要】 随着互联网的趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己的信息推广出去&#xff0c;最好方式就是建立自己的平台信息&#xff0c;并对其进行管理&#xff0c;随着现在智能手机的普及&#xff0c;人们对于智能手机里面的应用“well”运动健身app也在不断…

安装systemd-bootchart

要安装systemd-bootchart&#xff0c;你可以按照以下步骤进行&#xff1a; 步骤一&#xff1a;更新软件包列表 首先&#xff0c;打开终端并更新你的软件包列表&#xff0c;以确保你拥有最新的可用软件包信息。运行以下命令&#xff1a; sudo apt update步骤二&#xff1a;安…

Python 连接 MySQL 及 SQL增删改查(主要使用sqlalchemy)

目录 一、环境 二、MySQL的连接和使用 2.1方式一&#xff1a;sql为主 2.1.1创建连接 2.1.2 表结构 2.1.3 新增数据 ​编辑 2.1.4 查看数据 ​编辑 2.1.5 修改数据 2.1.6 删除数据 2.2方式二&#xff1a;orm对象关系映射 2.2.1 mysql连接 2.2.2 创建表 2.2.3 新增…

ORA-01652 表空间不够解决方案

前章&#xff1a;出现表空间不足不要手动强制删除对应数据文件存储目录下的DBF文件&#xff0c;需要用SQL语句进行数据文件的DROP&#xff0c;否则会导致ORA-01033报错&#xff0c;因为我没有开启数据库的归档所以不能通过RECOVER的形式找回数据文件最后只能重装本地ORACLE。 …

大模型如何通过token进行推理?

大型模型通过token进行推理的过程通常涉及以下步骤&#xff1a; 1、Tokenization&#xff08;分词&#xff09;&#xff1a;首先&#xff0c;输入文本或序列被分割成tokens&#xff0c;这些tokens通常是单词、子词或字符的序列。这一步通常由预训练模型的tokenizers完成。 2、…

转型AI产品经理(7):“格式塔原则”如何应用在Chatbot产品中

格式塔原则&#xff0c;又称为完形原则&#xff0c;它是一组关于人类如何感知视觉元素的心理学理论&#xff0c;这些原则说明了大脑如何将分散的视觉元素整合为有意义的整体&#xff0c;即使这些元素本身可能是分离的&#xff0c;帮助我们理解人们如何组织和解释复杂的视觉信息…

2013年 阿拉斯加巴罗活动层厚度和土壤含水量

Pre-ABoVE: Active Layer Thickness and Soil Water Content, Barrow, Alaska, 2013 ABoVE前&#xff1a;阿拉斯加巴罗活动层厚度和土壤含水量&#xff0c;2013年 简介 文件修订日期&#xff1a;2018-01-10 数据集版本&#xff1a;1 摘要 该数据集提供了 2013 年 8 月在…