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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库模型建模工具_数据库设计工具有哪些

    数据库模型建模工具_数据库设计工具有哪些对于数据模型的建模,最有名的要数ERWin和PowerDesigner,基本上,PowerDesigner是在中国软件公司中他是非常有名的,其易用性、功能、对流行技术框架的支持、以及它的模型库的管理理

    2022年8月6日
    1
  • Jlink或者stlink用于SWD接口下载程序

    Jlink或者stlink用于SWD接口下载程序最近要使用stm32f103c8t6最小系统板,直接ISP串口下载程序太麻烦,就想着使用swd接口来调试。结果:通过SWD接口下载程序成功,但调试失败,还不知原因,会的的人麻烦交流一下。SWD接口:3.3VDIO(数据)CLK(时钟)GND1.首先声明jlink和stlink都有jtag和swd调试功能。jlink接口如下:如图,我使用的就是VCC…

    2022年4月25日
    51
  • ArrayList底层实现原理「建议收藏」

    ArrayList底层实现原理「建议收藏」ArrayList简介ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。源码分析创建了一个大小为0的数组,在后面会用到。声明了一个数组。ArrayList的无参构造方法,将前面声明创建的大小为0的数组赋给elementData数组。这是ArrayList的有参构造方法,传入一个int类型的变量,相当于我们在使用arrayList的时候指定list的大小

    2022年8月8日
    0
  • 开关稳压DC—DC降压电路简介

    开关稳压DC—DC降压电路简介  在做数字压力开关项目时,电源输入要求是12V~24V±10%,系统内需要5V和3.3V的电源,这时提供了三个方案从中选择,方案一:使用24V-5V和5V-3.3V的LDO线性稳压芯片。方案二:使用24V-12V,12V-5V,5V-3.3V种LDO线性稳压芯片。方案三:使用24V-5V开关稳压芯片和5V-3.3V的线性稳压芯片。  最后考虑决定使用方案三,方案一中24V-5V的线性稳压芯…

    2022年6月20日
    30
  • 常用Java编程软件有哪些[通俗易懂]

    常用Java编程软件有哪些[通俗易懂]很多想学Java的人想知道常用的Java编程软件有哪些,毕竟只有掌握软件才能更好的工作。然而,只掌握软件工具并不够,你还需要具备一定的知识基础,更要熟练掌握各个软件的应用,常用的Java编程软件有哪些?1、IntelliJIDEAIntelliJIDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面的功能可以说

    2022年7月7日
    46
  • streamsets数据采集平台介绍

    streamsets数据采集平台介绍Streamsets功能介绍Streamsets功能介绍1数据采集组件简介1.1场景分析1.2组件特点1.3数据接入组件2数据采集管道介绍2.1管道特点2.2数据源,处理器,目标源介绍2.3常用数据源组件2.4常用处理器组件2.5常用目标源组件3任务管道介绍3.1详情的任务管道3.2创建采集任务3.3运行任务详细信息4对数据源组件处理器组件目标源组件统计5数据源详细介…

    2022年6月7日
    48

发表回复

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

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