前言

说起元素定位,一定是学习自动化测试绕不开的第一道关,无论是web端的UI自动化还是移动端的自动化,在需要首先对元素进行定位才可以完成对元素的操作已达成测试目的,在Selenium中,可以使用find_element(定位单个元素)或find_elements(定位多个元素)方法来定位元素。

Selenium元素定位常用API

在工作中我们常用的元素定位API一共有8种,我们先来了解以下6种,xpath和css_selector我们在后面的文章中单独学习

通过id定位

说明

当所定位的元素具有id属性时,我们可以使用by_id来定位该元素,id一般情况下在当前页面中是唯一的。

语法

drivr.find_element_by_id(id)

示例

打开百度首页,定位搜索框,查看页面元素,可以看到搜索框元素的id为 kw

代码

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
el = driver.find_element_by_id('kw')
# 打印元素
print(el)
# 查看元素对应的源码
print(el.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到el是一个WebElement类型的对象

定位多个元素

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
els = driver.find_elements_by_id('kw') # 查看返回结果的数据类型
print("数据类型", type(els))
print("元素个数", len(els)) # 遍历结果,查看元素源码
for i in els:
print(i.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到返回数据的类型为list,元素个数为1个

通过name定位

说明

当所定位的元素具有id属性时,我们可以使用by_name来定位该元素,name一般情况下在当前页面中不是唯一的。

语法

drivr.find_element_by_name(name)

示例

打开百度首页,定位搜索框,查看页面元素,可以看到搜索框元素的name为 wd

代码

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
el = driver.find_element_by_name('wd')
# 打印元素
print(el)
# 查看元素对应的源码
print(el.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到el是一个WebElement类型的对象

定位多个元素

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
els = driver.find_elements_by_name('wd') # 查看返回结果的数据类型
print("数据类型", type(els))
print("元素个数", len(els)) # 遍历结果,查看元素源码
for i in els:
print(i.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到返回数据的类型为list,元素个数为1个

通过class_name定位

说明

当所定位的元素具有class属性时,我们可以使用by_class_name来定位该元素,class属性一般为多个值。

语法

drivr.find_element_by_class_name(class属性值)

示例

打开百度首页,定位搜索框,查看页面元素,可以看到搜索框元素的class_name为 s_ipt

代码

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
el = driver.find_element_by_class_name('s_ipt')
# 打印元素
print(el)
# 查看元素对应的源码
print(el.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到el是一个WebElement类型的对象

定位多个元素

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
els = driver.find_elements_by_class_name('s_ipt') # 查看返回结果的数据类型
print("数据类型", type(els))
print("元素个数", len(els)) # 遍历结果,查看元素源码
for i in els:
print(i.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到返回数据的类型为list,元素个数为1个

通过tag_name定位

说明

通过元素的标签名称来定位,如果页面中存在多个相同标签,默认返回第一个标签元素

语法

drivr.find_element_by_tag_name("标签名")

示例

打开网易企业邮箱登录界面,定位登录按钮,查看页面元素,可以看到登录按钮的tag_name为 button

代码

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://qiye.163.com/login/"
driver.get(url)
sleep(2) # 元素定位
el = driver.find_element_by_tag_name('button')
# 打印元素
print(el)
# 查看元素对应的源码
print(el.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到el是一个WebElement类型的对象

定位多个元素

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://qiye.163.com/login/"
driver.get(url)
sleep(2) # 元素定位
els = driver.find_elements_by_tag_name('button') # 查看返回结果的数据类型
print("数据类型", type(els))
print("元素个数", len(els)) # 遍历结果,查看元素源码
for i in els:
print(i.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到返回数据的类型为list,元素个数为2个

通过link_text定位

说明

by_link_text通过超文本链接上的文字信息来定位元素,一般专门用于定位页面上的超文本链接。

语法

drivr.find_element_by_link_text("全部文本")

示例

打开百度首页,定位点击超链接 新闻

代码

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
el = driver.find_element_by_link_text('新闻')
# 打印元素
print(el)
# 查看元素对应的源码
print(el.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到el是一个WebElement类型的对象

定位多个元素

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
els = driver.find_elements_by_link_text('新闻') # 查看返回结果的数据类型
print("数据类型", type(els))
print("元素个数", len(els)) # 遍历结果,查看元素源码
for i in els:
print(i.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到返回数据的类型为list,元素个数为1个

通过partial_link_text定位

说明

当不确定超链接上的文本信息或者只想通过一些关键字进行匹配时,可以使用by_partial_link_text这个方法来通过部分链接文字进行匹配

可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词

如果有多个值,默认返回第一个值

语法

drivr.find_element_by_partial_link_text("部分文本")

示例

打开百度首页,定位点击超链接 hao123

代码

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
el = driver.find_element_by_partial_link_text('hao')
# 打印元素
print(el)
# 查看元素对应的源码
print(el.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到el是一个WebElement类型的对象

定位多个元素

# 导入selenium
from selenium import webdriver
from time import sleep # 实例化浏览器对象
driver = webdriver.Chrome() # 访问被测网址
url = "https://www.baidu.com"
driver.get(url)
sleep(2) # 元素定位
els = driver.find_element_by_partial_link_text('hao') # 查看返回结果的数据类型
print("数据类型", type(els))
print("元素个数", len(els)) # 遍历结果,查看元素源码
for i in els:
print(i.get_attribute('outerHTML'))
# 关闭浏览器
driver.quit()

输出结果如下:

可以看到返回数据的类型为list,元素个数为1个

参考

https://www.cnblogs.com/liuyuelinfighting/p/14925556.html

Selenium系列4-元素定位的更多相关文章

  1. selenium+java二元素定位

    页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 自动化测试步骤 定位元素 ...

  2. selenium自动化之元素定位方法

    在使用selenium webdriver进行元素定位时,有8种基本元素定位方法(注意:并非只有8种,总共来说,有16种). 分别介绍如下: 1.name定位 (注意:必须确保name属性值在当前ht ...

  3. Python3-Selenium自动化测试框架(二)之selenium使用和元素定位

    Selenium自动化测试框架(二)之selenium使用和元素定位 (一)selenium的简单使用 1.导包 from selenium import webdriver 2.初始化浏览器 # 驱 ...

  4. selenium webdriver python 元素定位

    总结   定位查找时,返回查找到的第一个match的元素.如果找不到,则 raise NoSuchElementException   单个元素定位: find_element_by_idfind_e ...

  5. Selenium之WebDriver元素定位方法

    Selenium WebDriver 只是 Python 的一个第三方框架, 和 Djangoweb 开发框架属于一个性质. webdriver 提供了八种元素定位方法,python语言中也有对应的方 ...

  6. 【Selenium专题】元素定位之CssSelector

    CssSelector是我最喜欢的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath loc ...

  7. 【Selenium专题】元素定位之一简单定位

    UI自动化工具千变万化.架构千变万化,但都逃离不开的关键一步就是元素定位.下面以Selenium为例介绍常见的几个元素定位方法 ID -元素id属性 WebElement El = driver.fi ...

  8. selenium 消息框元素定位处理

    以下内容来自于“风少”的博客 <元素定位:selenium消息框处理 (alert.confirm.prompt)> 基础普及 alert对话框 .细分三种,Alert,prompt,co ...

  9. Java + Selenium + WebDriver八大元素定位方式

    UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...

  10. 大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#

    关于昨天的文章 今天有朋友反馈,代码运行的时候,selenium提示警告 DeprecationWarning: use options instead of chrome_options drive ...

随机推荐

  1. 如何看待Android开发的“前景和内卷”

    我们首先来意淫一波 5G时代Android即将崛起,Android将与物联网强强联合,配合上5G信息高速传递的模式,再搭配物联网号召的"万物互通"的旗号,同时各位Android开发 ...

  2. 知乎1578赞:Android 中为什么需要 Handler?

    要理解 Handler,就得先理解 Android 的 Message 机制. 这里以用户滑动微信朋友圈为例,讲解一下 Android 的 Message 机制是怎么运行的,Message 机制中的各 ...

  3. NTP 集群简略部署指南

    NTP 集群简略部署指南 by 无若 1. NTP 简介 网络时间协议(英语:Network Time Protocol,简称NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的 ...

  4. Color Theme of Emacs

    Choose color theme interactively: M-x customize-themes, or M-x color-theme-select (use key "q&q ...

  5. Linux 硬盘与硬件管理

    硬件以文件系统(Filesystem)角度来看 文件系统:一个可被挂载的数据称为文件系统,每个操作系统可以使用的文件系统并不一样,windows98是FAT或者FAT16文件系统,而windows20 ...

  6. netty系列之:netty中的懒人编码解码器

    目录 简介 netty中的内置编码器 使用codec要注意的问题 netty内置的基本codec base64 bytes compression json marshalling protobuf ...

  7. Mysql中的Join详解

    一.Simple Nested-Loop Join(简单的嵌套循环连接) 简单来说嵌套循环连接算法就是一个双层for 循环 ,通过循环外层表的行数据,逐个与内层表的所有行数据进行比较来获取结果,当执行 ...

  8. SQL 练习27

    查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 SELECT cid,AVG(score) 平均成绩 from sc GROUP BY cid ORDER BY A ...

  9. SSM自学笔记(二)

    3.SpringMVC入门 1.Spring与Web环境集成 1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplication ...

  10. C++11 shared_ptr智能指针(超级详细)

    在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如: 有些内存资源已经被释放,但指向它的指针并没 ...