Python自动化测试之selenium - 元素定位

元素定位

元素定位就是通过元素的信息或者元素层级结构来定位元素。当定位到了重复的属性,默认会定位到第一个标签。

id定位 - find_element_by_id

同一个html页面中id值是唯一的。

模拟在百度输入框中输入想要查找的内容

 

python

代码解读

复制代码

from selenium import webdriver import time ​ ​ driver = webdriver.Chrome() driver.get("http://www.baidu.com") inp = driver.find_element_by_id("kw")  # 通过id定位元素 - 定位到输入框 inp.send_keys("蜡笔小新")  # 针对输入框进行输入操作 time.sleep(2) driver.quit()

name定位-find_element_by_name

通过元素的name属性值进行元素定位,该属性是可以重复的。

 

arduino

代码解读

复制代码

find_element_by_name      # name属性

classname定位-find_element_by_class_name

通过元素的class属性进行元素定位,参数是其中一个属性值,不能使用所有属性值进行定位

 

bash

代码解读

复制代码

find_element_by_class_name  # 类名

tag_name定位

通过元素的标签名称进行定位,同一个html页面中相同元素有很多。

 

bash

代码解读

复制代码

find_element_by_tag_name  # 通过标签名

link_text定位-find_element_by_link_text

通过超链接的全部文本信息进行定位。

 

ini

代码解读

复制代码

from selenium import webdriver import time ​ ​ driver = webdriver.Chrome() driver.get("https://www.baidu.com") res = driver.find_element_by_link_text("新闻")  # 通过a标签定位元素,重复的话默认定位第一个 res.click()  # 点击操作 time.sleep(2) driver.quit() ​

partical_link_text定位 - find_element_by_partical_link_text

通过超链接的局部文本信息进行定位。也就是进行模糊匹配

 

arduino

代码解读

复制代码

driver.find_element_by_partical_link_text("新闻")

定位一组元素 - find_elements_by_xxx

可以解决定位到多个元素如何获取所有的重复的元素。注意多了一个s哦~

定位一组元素返回的值是一个列表,即可以通过索引进行获取指定的元素。

 

ini

代码解读

复制代码

from selenium import webdriver import time ​ ​ driver = webdriver.Chrome() driver.get("https://www.baidu.com") res = driver.find_elements_by_tag_name("a")  # 通过a标签定位元素,结果是一个列表 print(res[0]) time.sleep(2) driver.quit()

xpath元素定位

XPath是XML Path的简称,是一门在XML文档中查找元素信息的语言,xpath可以使用工具生成。

 

python

代码解读

复制代码

from selenium import webdriver import time ​ ​ driver = webdriver.Chrome() driver.get("https://cn.bing.com/") res = driver.find_element_by_xpath('//*[@id="sb_form_q"]')  # 通过a标签定位元素,结果是一个列表 res.send_keys('蜡笔小新')  # 获取标签的文本内容 id time.sleep(2) driver.quit() ​

Xpath定位策略find_element_by_xpath(xpath表达式)

最常用的定位方式

路径定位:

绝对路径:表达式以/html开头,元素的层级之间以/分隔,相同层级的元素可以使用索引,索引从1开始,找到元素需要经过所有的层级元素比如/html/body/div/form/p[1]/input

相对路径:匹配任意层级的元素,以//tag_name或者//*开头,*表示所有的标签

属性定位:最好能够通过属性定位到唯一的元素

xpath表达式://*[@属性名=属性值]

比如//input[@value='取消']

属性与逻辑结合:同时满足多个条件

xpath表达式://tag_name[@属性名=属性值 and @属性名=属性值]

属性与层级结合:

xpath表达式://tag_name[@属性名=属性值]/tag_name[@属性名=属性值]

通过全部文本内容进行定位

xpath表达式://*[test()='文本内容']

元素的某个属性值包含value

xpath表达式://*[contains(@属性名,'属性值的一部分')]

css定位

介绍

使用的方法是find_element_by_css_selector(css选择器表达式)

一般不常用,可能不能精确定位。多种属性可以组合使用

id选择器

表达式:#id表示#id值

 

ini

代码解读

复制代码

driver = webdriver.Chrome() driver.get("https://cn.bing.com/") res = driver.find_element_by_css_selector('#sb_form_q')

class选择器

表达式:.class表示.其中一个属性值

元素选择器 - 不推荐使用

表达式:tagname

会定位到多个,因此不推荐使用

属性选择器

表达式:[属性名=属性值]

层级选择器
  • 后代选择器 - 空格表示后代选择器
 

css

代码解读

复制代码

div span - 表示div内部的span标签

  • 儿子选择器 - >表示儿子关系,内部第一层
 

css

代码解读

复制代码

div > span - 表示div内部第一层的span标签

  • 毗邻选择器 - +表示毗邻关系,毗邻关系:同级别紧挨着的下一个标签
 

css

代码解读

复制代码

div + span - 表示紧挨着div的同级别的span标签

  • 弟弟选择器 - ~表示弟弟关系,弟弟关系:同级别的所有标签
 

css

代码解读

复制代码

div ~ span - 表示和div同级别的span标签

元素定位的另一种写法

 

ini

代码解读

复制代码

from selenium.webdriver.common.by import By ​ res = driver.find_element(by=By.CSS_SELECTOR, value='#sb_form_q') res = driver.find_element(By.XPATH, '#sb_form_q') res = driver.find_element(By.ID, '#sb_form_q') res = driver.find_element(By.CLASS_NAME, '#sb_form_q') res = driver.find_element(By.NAME, '#sb_form_q') res = driver.find_element(By.TAG_NAME, '#sb_form_q') res = driver.find_element(By.LINK_TEXT, '#sb_form_q')

案例:

 

python

代码解读

复制代码

from selenium import webdriver from selenium.webdriver.common.by import By import time ​ ​ driver = webdriver.Chrome() driver.get("https://cn.bing.com/") res = driver.find_element(By.CSS_SELECTOR, '#sb_form_q')  # 通过a标签定位元素,结果是一个列表 res.send_keys('蜡笔小新')  # 获取标签的文本内容 id time.sleep(2) driver.quit() ​

  这是我整理的《2024最新Python自动化测试全套教程》,以及配套的接口文档/项目实战【网盘资源】,需要的朋友可以下方视频的置顶评论获取。肯定会给你带来帮助和方向。

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值