1.ID元素定位
基于元素属性中的id的值来进行定位,id是一个标签的唯一属性值可以通过id属性来唯一定位一个元素,是首选的元素定位方式,动态ID不
做考虑。
driver .find_element_by_id('id')
driver .find_element(By.ID,'id')
2.name元素定位
基于元素属性中的name的值来进行定位,但name并不是唯一的,很可能会出现重名。
driver.find_element_by_name('name')
driver.find_element(By.NAME, 'name')
3.class name元素定位
基于元素class样式来定位,非常容易遇到重复的,这个方法的参数只能是一个class值,列如: class属性有空格隔开两个class的值时,只能选取其中一个进行定位。
driver.find_element_by_class_name('class name')
driver.find_element(By .CLASS_NAME, 'class name')
4.tag name元素定位
通过元素的标签名来定位元素,如: input标签、span标签;标签名来进行定位元素,重复度最高,只有在需要定位后进行二次筛选的情况下使用。
driver.find_element_by_tag_name(tag name')'tag name')
driver.find_element(BY.TAG_NAME, 'tag name')
5.css selector元素定位
css可以通过元素的id、class、属性、子元素、后代元素、index、兄弟元素等多种方式进行元素定位
6.link text元素定位
主要用于超链接进行定位,全部匹配文本值,使用在链接位置处,例如: a标签
driver.find_element_by_link_text('link_text')
driver.find_element(By.LINK_TEXT,'link text')
7.partial link text元素定位
基于链接的部分文字来定位,link text模糊匹配,模糊查询匹配到多个符合调节的元素,选取第一个,同样也只使用在链接位置处,例如: a标签
driver.find_element_by_partial_link_text('partial_link_text')
driver.find_element(By.PARTIAL_LINK_TEXT,'partial_link_text')
8.xpath元素定位
xpath是一门在xml文档中查找信息的语言。xpath可用来在xml文档中对元素和属性进行遍历。由于html的层次结构与xml的层次结构天然一致,所以使用xpath也能够进行html元素的定位。xpath的功能非常强大,通过xpath的各种方式组合,能够解决selenium自动化测试中界面元素定位的绝大部分问题
8.1 xpath通过绝对路径定位元素
将 Xpath 表达式从 html 的最外层节点,逐层填写,最后定位到操作元素,这种方法,一旦路径有变化会导致定位失败,所以不推荐使用该方式。
driver.find_element_by_xpath('/html/body/div[4]/div[1]/a')
driver.find_element(By.XPATH,'/html/body/div[4]/div[1]/a')
8.2 xpath通过相对路径定位元素
绝对路径与相对路径的差别与文件系统中的绝对和相对路径类似,相对路径是只给出元素路径的部分信息,在html的任意层次中寻找符合条件的元素,语句以//开始。
driver.find_element_by_xpath('//form/span')
driver.find_element(By.XPATH, '//form/span')
8.3xpath通过元素属性定位元素
单属性定位: //input[@name='pwd]表示name属性为pwd的input
driver.find_element_by_xpath("//input[@name='pwd']")
driver.find_element(By.XPATH,“//input[@name='pwd']")
多属性定位: //a[@title="tutorial"and @rel="follow"]
driver.find_element_by_xpath('//a[@title="tutorial" and @rel="follow"')
driver.find_element(By.XPATH,'//a[@title="tutorial" and @rel="follow"]')
8.4xpath通过属性值模糊匹配定位元素
xpath模糊匹配的函数有两种: starts-with和和contains
starts-with: //label[starts-with(@class,'btn')],class属性值以btn开头的label元素
driver.find_element_by_xpath("//label[starts-with(@class,'btn')]")
driver.find_element(By.XPATH,"//label[starts-with(@class,'btn')]")
contains: //label[contains(@class,btn')],通过属性值包含btn的label元素
driver.find_element_by_xpath("//label[contains(@class,'btn')]")
driver.find_element(By.XPATH,"//label[contains(@class,'btn')]")
8.5xpath通过文本定位元素
文本内容的定位是利用html的text字段进行定位的方法,//span[text()= '下一步'],由于 “下一步” 这几个字是浏览器界面就“所见即所得”可以看到的,这种特征改的可能性非常小,优先推荐使用。与属性值类似,文本内容也支持starts-with和contains模糊匹配
driver.find_element_by_xpath("//span[text()='下一步']")
driver.find_element(By.XPATH, "//span[text()='下一步']")
driver.find_element(By.XPATH,"//span[starts-with(text(),下一步')]”)
driver.find_element(By.XPATH,"//span[contains(text(),'下一步')]")
8.6 xpath常见语法一览表
表达d 说明 举例
/ 从根节点开始选取 /html/div/span
// 从任意节点开始选取 //input
. 选取当前节点
.. 选取当前节点的父节点 //input/.. 会选取 input 的父节点
@ 选取属性,或者根据属性选取 //input[@data] 选取具备 data 属性的 input 元素 //@data 选取所有 data 属性
* 通配符,表示任意节点或任意属性 //*[@name='searchKey'] //*[@*='s_int']"

10. Selenium4.0 Relative Locators(网格定位/相对定位)

Selenium 4引入了Relative Locators (相对定位器方法) ,以前称为FriendlyLocators。当不容易构造所需元素的定位器,但容易在空间上描述元素与具有容易构造定位器的元素的关系时,这些定位器是有帮助的。Relative Locators (相对定位器方法)可以将先前定位的元素引用或另一个定位器作为原点的参数

10.1 Above(上方)

如果由于某种原因,电子邮件文本字段元素不容易识别,而密码文本字段元素容易识别,那么我们可以使用“输入”元素位于密码元素“上方”的事实来定位文本字段元素。
email_locator = locate_with(BY.TAG_NAME, "input").above({By.ID :"password"})

10.2 Below (下方)

如果由于某种原因,密码文本字段元素不容易识别,而电子邮件文本字段元素容易识别,那么我们可以使用它是电子邮件元素“下方”的“输入”元素这一事实来定位文本字段元素。

password_locator = locate_with(By.TAG_NAME,"input").below({By.ID:"emai"})

10.3 Left of (左边)

如果由于某种原因取消按钮不容易识别,而提交按钮元素容易识别,那么我们可以利用它是提交元素“左侧”的一个“按钮”元素来定位取消按钮元素。

cancel_locator = locate_with(By.TAG_NAME,"button").to_left_of({By.ID:"submit"})

10.4 Right of (右边)

如果提交按钮由于某种原因不容易识别,而取消按钮元素容易识别,那么我们可以使用“取消”元素右侧的“按钮”元素来定位提交按钮元素。

submit_locator = locate_with(By.TAG_NAME,"button").to_right_of({By.ID:"cance1"})

10.5 Near (附近)

如果相对定位不明显,或者它根据窗口大小而变化,则可以使用near方法来标识距离所提供的定位器最多50px的元素。使用这种方法的一个很好的例子是,一个表单元素没有一个容易构造的定位器,但它的相关输入标签元素有。

email_locator = locate_with(By.TAG_NAME,"input").near({By.ID:"lbl-emai"})

10.6 Chaining relative locators (链接定位)

如果需要,您也可以链接定位器。有时,元素最容易被识别为一个元素的上方/下方和另一个元素的左右。

submit_locator =locate_with(By.TAG_NAME, "button").below({BY.ID:"email"}).to_right_of({By.ID:"cancel"})

11 元素定位不同定位方式

除了常规元素匹配,还有一些特殊的元素定位方式

我们以下面的HTML代码为案例来进行讲解

11.1 All matching elements (匹配所有元素/组元素)

有几个用例需要获取与定位器匹配的所有元素的引用,而不仅仅是第一个。复数find elements方法返回元素引用的集合。如果没有匹配,则返回一个空列表。在这种情况下,对所有水果和蔬菜列表项的引用将在一个集合中返回。

plants = driver.find_elements(By.TAG_NAME,"li")

通常,您获得了一个元素集合,但希望使用特定的元素,这意味着您需要遍历该集合并标识您想要的元素。

elements = driver.find elements(By.TAG NAME, 'p')
for e in elements :
   print(e.text)

11.2 Find Elements From Element (元素内定位/元素链接定位)

它用于在父元素的上下文中查找匹配子元素的列表。为了实现这一点,父元素被链接到' findElements来访问子元素

element = driver.find_element(By.TAG_NAME, 'div')

elements = element.find_elements(By .TAG_NAME,'p')

for e in elements:

print(e.text)

11.3 Get Active Element(活动元素定位)

它用于跟踪(或)找到当前浏览上下文中焦点所在的DOM元素。

attr = driver.switch_to.active_element.get_attribute("name")

12 关于网络元素的信息(结果检查需要用)

可以查询有关特定元素的许多详细信息

12.1 是否显示

此方法用于检查连接的元素是否正确 显示在网页上,返回一个 Boolean 值,如果连接的元素显示在当前的浏览器上下文中,则为True 否则返回false.

is button_visible = driver.find_element(By.CSS_SELECTOR, "[name='login']").is_displayed()

12.2 元素是否被选定

此方法确定是否 已选择 引用的元素.此方法广泛用于复选框,单选按钮,输入元素和选项元素.

返回一个布尔值,如果在当前浏览上下文中 已选择 引用的元素,则返回 True,否则返回False.

value = driver.find_element(By.CSS_SELECTOR,"input[type='checkbox']:firs5t-of-type").is_selected()

12.3 获取元素标签名

此方法用于获取在当前浏览上下文中 具有焦点的被引用元素的 TagName

attr = driver.find_element(By.CSS_SELECTOR,"h1").tag_name

12.4 获取元素矩形

用于获取参考元素的尺寸和坐标

提取的数据主体包含以下详细信息:

元素左上角的X轴位置
元素左上角的y轴位置
元素的高度
元素宽度

res = driver.find_element(By.CSS_SELECTOR,"h1").rect

12.5 获取元素CSS值

获取当前浏览上下文中元素的特定计算样式属性的值

cssValue = driver.find_Element(By.LINK_TEXT,“More information...").value_of_css_property('color')

12.6获取元素文本

获取特定元素渲染后的文本

text = driver.find_element(By.CSS_SELECTOR,"h1").text

python selenium元素定位的更多相关文章

  1. python selenium 元素定位(三)

    上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...

  2. python+selenium元素定位——8种方法

    定位元素,selenium提供了8中元素定位方法: (1)find_element_by_id() :html规定,id在html中必须是唯一的,有点类似于身份证号 (2)find_element_b ...

  3. python+selenium 元素定位--iframe

    1. 一般webdriver要操作页面元素需要在Top Window的状态下,如下: 2.当浏览器显示iframe时,用正常的元素定位是没有效果的,需要将页面装换到iframe下再对页面元素进行操作 ...

  4. python+selenium元素定位之XPath学习02

    XPath 语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. XML 实例文档 我们将在下面的例子中使用这个 ...

  5. python+selenium元素定位之XPath学习01

    参考文档1:https://www.w3school.com.cn/xpath/xpath_syntax.asp 参考文档2:https://www.runoob.com/xpath/xpath-tu ...

  6. python+selenium元素定位之CSS学习02

    参考文档:https://www.runoob.com/cssref/css-selectors.html CSS选择器用于选择你想要的元素的样式的模式. "CSS"列表示在CSS ...

  7. python+selenium元素定位之CSS学习01

    参考文档:https://www.w3school.com.cn/cssref/css_selectors.asp 选择器 例子 例子描述 CSS .class .intro 选择 class=&qu ...

  8. python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转。

    python+selenium 元素被定位到而且click()也提示执行成功,但是页面就是没有变化和跳转. 如果多次定位和click(),有时候会跳转. 我遇到很多次就是很郁闷,有人说,操作太快的,页 ...

  9. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  10. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

随机推荐

  1. Vue3简单项目流程分享——工作室主页

    Vue3简单项目流程分享--工作室主页 零.写在最前 以下是项目相关的一些链接: 源代码GitHub仓库(需要魔法上网):仓库 网页示例(需要魔法上网):网页示例 UI图(来源@设计师杨贺):Mast ...

  2. 2023 Hive 面试大纲

    先说一些废话 总结一下Hive面试宝典中的要点,方便读者快速过一遍Hive面试所需要的知识点. 本文请搭配 Hive面试宝典 来食用更美味哟 ┗( ▔, ▔ )┛ 方便自己系统性回忆,根据*的数量来标 ...

  3. jquery的折叠动画 渐隐渐显动画

     <button name="up">折叠隐藏</button>     <button name="down">折叠显示& ...

  4. map数据类型

      MAP数据类型是一个类似于对象的数据类型             大型项目中会经常使用                      通过 构造函数来定义MAP数据类型             con ...

  5. 硬件开发笔记(十七):RK3568底板电路串口、485、usb原理图详解

    前言   原理图有一些常用电路.  本篇就将集中常用电路分析完,如uart口,涉及usart串口.rs485.usb口.   串口   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接 ...

  6. PhantomReference 和 WeakReference 究竟有何不同

    本文基于 OpenJDK17 进行讨论,垃圾回收器为 ZGC. 提示: 为了方便大家索引,特将在上篇文章 <以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的> 中讨 ...

  7. 牛客小白月赛96(待F)

    比赛链接:牛客小白月赛96 赛时感受 赛时在前面卡的时间有点长,C题没开longlong wa了n发,D题没考虑负数又wa了n发,然后来写E的时候时间就不长了,匆忙写一次交一发. A 思路 当其中一个 ...

  8. 超越datetime:Arrow,Python中的日期时间管理大师

    介绍 Arrow是一个Python库,它提供了一种合理且对人类友好的方法来创建.操作.格式化和转换日期.时间和时间戳.它实现了对datetime类型的更新,填补了功能上的空白,提供了一个智能的模块AP ...

  9. BST-splay板子 - 维护一个分裂和合并的序列

    splay 均摊复杂度 \(O(\log n)\) 证明: https://www.cnblogs.com/Mr-Spade/p/9715203.html 我这个 splay 有两个哨兵节点,分别是1 ...

  10. BST-Treap名次树数组&指针实现板子 Ver1.0

    这里只有板子没有原理QWQ 可实现 1.插入 x 数 2.删除 x 数(若有多个相同的数,只删除一个) 3.查询 x 数的排名(排名定义为比当前数小的数的个数 +1) 4.查询排名为 x 的数 5.求 ...