Selenium系列4-元素定位

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

image-20210915151758333

代码

# 导入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()

输出结果如下:

image-20210915154738133

可以看到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()

输出结果如下:

image-20210915161212582

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

通过name定位

说明

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

语法

drivr.find_element_by_name(name)

示例

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

image-20210915162228193

代码

# 导入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()

输出结果如下:

image-20210915154738133

可以看到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()

输出结果如下:

image-20210915161212582

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

通过class_name定位

说明

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

语法

drivr.find_element_by_class_name(class属性值)

示例

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

image-20210916152122253

代码

# 导入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()

输出结果如下:

image-20210915154738133

可以看到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()

输出结果如下:

image-20210915161212582

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

通过tag_name定位

说明

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

语法

drivr.find_element_by_tag_name("标签名")

示例

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

image-20210916154544887

代码

# 导入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()

输出结果如下:

image-20210916155003704

可以看到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()

输出结果如下:

image-20210916155052862

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

说明

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

语法

drivr.find_element_by_link_text("全部文本")

示例

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

image-20210916162710938

代码

# 导入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()

输出结果如下:

image-20210916163157767

可以看到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()

输出结果如下:

image-20210916163131536

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

说明

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

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

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

语法

drivr.find_element_by_partial_link_text("部分文本")

示例

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

image-20210916163652350

代码

# 导入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()

输出结果如下:

image-20210916164000370

可以看到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()

输出结果如下:

image-20210916164020208

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

参考

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119798.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jmeter并发测试教程_jmeter怎么进行并发测试

    jmeter并发测试教程_jmeter怎么进行并发测试jmeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试,很多用户使用的时候不知道jmeter怎么进行并发测试,接下来就跟小编一起来看看吧,有需要的小伙伴不要错过!jmeter怎么进行并发测试1、打开jmeter.bat文件,添加线程组,编辑线程数,这里设置100个线程数,循环2次,就是一台机器发送100*2=200个请求。2、点击线程组,右击添加→取样器→HTTP请求…

    2022年9月1日
    3
  • java三元运算符有哪些_java有返回值和无返回值

    java三元运算符有哪些_java有返回值和无返回值关于Java中的三元运算符的详解,请参照这篇文章,写得很好:java三元运算符详解这里我只补充总结一下:对于Java三元运算符: (条件表达式)?表达式1:表达式2;三元运算符要求必须有返回值,即表达式1和表达式2要求必须能return,所以不能在表达式1或表达式2中书写输出语句等。基于此,三元运算符不能独立成句,它就如同一个变量,可以出现在方法参数中、用在赋值语句=的右侧等地方,总之不能独立成句。**以下给出几个示例以供参考:inta=(1<2)?

    2022年10月8日
    2
  • jvm面试题及答案2020_jvm常见面试题

    jvm面试题及答案2020_jvm常见面试题Jvm面试题及答案(2021年Jvm面试题大全带答案)Jvm面试题及答案【最新版】Jvm高级面试题大全(2021版),发现网上很多Jvm面试题及答案整理都没有答案,所以花了很长时间搜集,本套Jvm面试题大全,Jvm面试题大汇总,有大量经典的Jvm面试题以及答案,包含Jvm语言常见面试题、Jvm工程师高级面试题及一些大厂Jvm开发面试宝典,面试经验技巧等,应届生,实习生,企业工作过的,都可参考学习!这套Jvm面试题汇总大全,希望对大家有帮助哈~博主已将以下面试题整理成了一个Jvm面试手册,是PD.

    2022年8月26日
    4
  • 黑马vue电商后台管理系统总结[通俗易懂]

    黑马vue电商后台管理系统总结[通俗易懂]vue电商后台管理系统-阶段总结一、项目技术栈前端前端采用vuecli脚手架搭建框架,使用elementUI美化项目结构环境依赖(开发依赖,运行依赖)富文本编辑器nprogress加载进度条echarts图表展示第三方http库axios后端后端是已经写好了的,采用express搭建的API服务,返回的数据是JSON格式的数据,只需要导入数据库,并配置一下数据库信息,就可以跑起来了,也有对应的api文档数据库数据库采用MySQL5.7

    2022年6月12日
    60
  • 数字电路实验环境 (Quartus II 9.0)

    数字电路实验环境 (Quartus II 9.0)大家好,我是孙不坚1208,记录一下数字电路这门课的实验环境((QuartusII9.0))安装。所需文件网盘链接:https://pan.baidu.com/s/1VnCc4wR7HAOgxfyWjoUHjw提取码:0kjq安装教程仅限于学习,安装前先关闭各类杀毒软件,注意安装路径不能有中文,存放安装包的路径最好也不要有中文。我们首先在c盘建好相应的文件目录,然后进行安装在此目录下。一、安装QuartusII9.0等它稍微加载,出现下面这个界面。这里进行安装,无脑点击下一步

    2022年7月12日
    20
  • 微信公众平台、微信公众平台.小程序、微信.开放平台[通俗易懂]

    微信公众平台、微信公众平台.小程序、微信.开放平台[通俗易懂]一个开发者账号如何上线多个小程序?一个小程序账号对应一个小程序,可发布一个小程序上线。如果需要开发多款小程序,请注册新的账号。https://developers.weixin.qq.com/community/develop/doc/000886957d47f87cf9997f47c5b000小程序怎么发布,一套小程序代码怎么同时发布到不同的小程序上面,发布为体验版和正式版本!点击上传旁边的详情按钮,打开配置页面,修改项目addip,吧这个appid修改成需要覆盖的线上小程序id即可https:

    2022年6月16日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号