前言

说起元素定位,一定是学习自动化测试绕不开的第一道关,无论是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实习面试难吗,应该如何应对?

    字节跳动的面试难不难其实很难去非常准确的定义,但是能肯定的一点是,字节跳动的面试题都很有水平,真正考察了该岗位在以后工作中需要的能力. 大学学的Java后面又自学Android方向,跟着老师在实验室做 ...

  2. 第3篇-CallStub新栈帧的创建

    在前一篇文章 第2篇-JVM虚拟机这样来调用Java主类的main()方法  中我们介绍了在call_helper()函数中通过函数指针的方式调用了一个函数,如下: StubRoutines::cal ...

  3. Linux 开机关机在线求助与指令输入

    由于那本书版本稍稍有点早,我就跳过学习第二章第三章了(分别是主机规划和虚拟机安装)下图为在自己电脑上安装好的redhat7 4.1 我们来登入 其中第一行是Linux发行商和发行版本(欸,我的这个怎么 ...

  4. Django ORM多表查询

    基于双下划线查询 根据存的时候,字段的数据格式衍生的查询方法 1.年龄大于35岁 res = models.AuthorDetails.objects.filter(age__lt=80) print ...

  5. SpringBoot自定义请求参数转换器

    需求 我们可能对接客户的系统的时候,虽然Spring为我们提供的很多方便的转换器,但是遇到还是可能遇到需要自定义请求参数转换器的情况. 日期转换器 SpringBoot默认是没有配置日期转换器的我们可 ...

  6. vsftpd - FTP 服务器安装

    由于要将本地程序上传至云服务器中,所以需要给云服务器端安装ftp服务器.记录一下ftp的安装过程,以便以后使用.服务器端所用系统为Ubuntu16.04. 1. 安装ftp服务器, apt-get i ...

  7. spring boot集成pagehelper(两种方式)

    当spring boot集成好mybatis时候需要进行分页,我们首先添加maven支持 <dependency> <groupId>com.github.pagehelper ...

  8. 【C#】 堆和栈

    前言 本文主要是讲解C#语言在内存中堆.栈的使用情况,使读者能更好的理解值类型.引用类型以及线程栈.托管堆. 首先感谢原文作者:Matthew Cochran 为我们带来了一篇非常好的文章,并配以大量 ...

  9. 从eclipse转idea不适记录【持续更新】

    使用eclipse和idea时,快捷键对比 从一些最扎心的开始: 关于print一类的打印输出:System.out.println()补全 idea中可以sout.souf.serr:分别对应out ...

  10. 通过refresh响应头,定时刷新或隔n秒跳转页面

    package day08; import java.io.IOException; import javax.servlet.ServletException; import javax.servl ...