Selenium系列4-元素定位
前言
说起元素定位,一定是学习自动化测试绕不开的第一道关,无论是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-元素定位的更多相关文章
- selenium+java二元素定位
页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法. 测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 自动化测试步骤 定位元素 ...
- selenium自动化之元素定位方法
在使用selenium webdriver进行元素定位时,有8种基本元素定位方法(注意:并非只有8种,总共来说,有16种). 分别介绍如下: 1.name定位 (注意:必须确保name属性值在当前ht ...
- Python3-Selenium自动化测试框架(二)之selenium使用和元素定位
Selenium自动化测试框架(二)之selenium使用和元素定位 (一)selenium的简单使用 1.导包 from selenium import webdriver 2.初始化浏览器 # 驱 ...
- selenium webdriver python 元素定位
总结 定位查找时,返回查找到的第一个match的元素.如果找不到,则 raise NoSuchElementException 单个元素定位: find_element_by_idfind_e ...
- Selenium之WebDriver元素定位方法
Selenium WebDriver 只是 Python 的一个第三方框架, 和 Djangoweb 开发框架属于一个性质. webdriver 提供了八种元素定位方法,python语言中也有对应的方 ...
- 【Selenium专题】元素定位之CssSelector
CssSelector是我最喜欢的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath loc ...
- 【Selenium专题】元素定位之一简单定位
UI自动化工具千变万化.架构千变万化,但都逃离不开的关键一步就是元素定位.下面以Selenium为例介绍常见的几个元素定位方法 ID -元素id属性 WebElement El = driver.fi ...
- selenium 消息框元素定位处理
以下内容来自于“风少”的博客 <元素定位:selenium消息框处理 (alert.confirm.prompt)> 基础普及 alert对话框 .细分三种,Alert,prompt,co ...
- Java + Selenium + WebDriver八大元素定位方式
UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...
- 大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#
关于昨天的文章 今天有朋友反馈,代码运行的时候,selenium提示警告 DeprecationWarning: use options instead of chrome_options drive ...
随机推荐
- python自动化之(自动生成测试报告)
前言: 用python执行测试脚本, 测试报告是记录我们测试过程的问题, 方便我们对整个测试过程的把控. 这里引用的是别人写好的模板, 我们拿过来用就OK, 能力强者可自行编写模板 测试报告图模板: ...
- java使用Selenium操作谷歌浏览器学习笔记(三)键盘操作
我们用Selenium打开网页后,可能需要在输入框输入一些内容等等,这时候就需要键盘操作了 使用sendKEys进行键盘操作,在bing的搜索框中输入内容并点击跳转 1 import org.open ...
- [TensorFlow2.0]-学习率 激活函数 损失函数
本人人工智能初学者,现在在学习TensorFlow2.0,对一些学习内容做一下笔记.笔记中,有些内容理解可能较为肤浅.有偏差等,各位在阅读时如有发现问题,请评论或者邮箱(右侧边栏有邮箱地址)提醒. 若 ...
- CVE-2020-2883漏洞复现&&流量分析
CVE-2020-2883漏洞复现&&流量分析 写在前面 网上大佬说CVE-2020-2883是CVE-2020-2555的绕过,下面就复现了抓包看看吧. 一.准备环境 靶机:win7 ...
- pikachu Unsafe Filedownload 不安全的文件下载
不安全的文件下载概述文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件 ...
- 「TJOI2019」唱、跳、rap 和篮球 题解
题意就不用讲了吧-- 鸡你太美!!! 题意: 有 \(4\) 种喜好不同的人,分别最爱唱.跳. \(rap\).篮球,他们个数分别为 \(A,B,C,D\) ,现从他们中挑选出 \(n\) 个人并进行 ...
- git 拉取代码指定分支
问题背景: 新项目还在开发阶段,没有正式对外发布,所以开发同事合并代码到develop上(或者其他名称分支上),而不是到master分支上 通过git拉取代码的时候,默认拉取的是master分支,如下 ...
- C#多线程---Event类实现线程同步
一.简介 我们使用类(.net Framework中的类,如 AutoResetEvent, Semaphore类等)的方法来实现线程同步的时候,其实内部是调用操作系统的内核对象来实现的线程同步. S ...
- 面向对象之编写驱动程序--中断(linux系统、s3c6410开发板)
/*------------------------- *先申明下,本人是个菜鸟,刚开始接触驱动程序编写,交代下开发环境(主机系统redhat6.3,开发板ARM-s3c6410) 以watchdog ...
- ffmpeg 常用知识点收集
ffmpeg 常用知识点收集 一.基础简介 FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影.转换.流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及l ...