Selenium 八种元素定位方法
前言:
我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素。工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素。那么我们怎么来定位他们呢?
在学习元素定位之前,我们最好能懂一点html的知识。
一、查看页面元素
用谷歌浏览器打开百度首页,点击右上角>更多工具>开发者工具,就可以看到整个页面的html代码了
点击框中左上角的箭头图标,移动鼠标到百度搜索框,就可以自动定位到百度搜索框的HTML代码了,查看到搜索框的属性,我们可以看到搜索框有id,name,class等属性。
二、元素定位
1、id定位: find_element_by_id()
从上面定位到的搜索框属性中,有个id="kw"的属性,我们可以通过这个id定位到这个搜索框
代码:
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过id定位搜索框,并输入selenium
- driver.find_element_by_id('kw').send_keys('selenium')
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
2、name定位: find_element_by_name()
从上面定位到的搜索框属性中,有个name="wd"的属性,我们可以通过这个name定位到这个搜索框
代码:
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过name定位搜索框,并输入selenium
- driver.find_element_by_name('wd').send_keys('selenium')
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
3、class定位:find_element_by_class_name()
从上面定位到的搜索框属性中,有个class="s_ipt"的属性,我们可以通过这个class定位到这个搜索框
代码:
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过class定位搜索框,并输入selenium
- driver.find_element_by_class_name('s_ipt').send_keys('selenium')
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
4、tag定位:find_element_by_tag_name()
如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等...。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。下面代码仅做参考,运行时必定报错
代码:
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过tag定位搜索框,并输入selenium, 此处必报错
- driver.find_element_by_tag_name('input').send_keys('selenium')
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
5、link定位:find_element_by_link_text()
此种方法是专门用来定位文本链接的,比如百度首页右上角有“新闻”,“hao123”,“地图”等链接
我们来定位“新闻”这个链接元素
代码:
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过link定位"新闻"这个链接并点击
- driver.find_element_by_link_text('新闻').click()
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
6、partial_link定位:find_element_by_partial_link_text()
有时候一个超链接的文本很长很长,我们如果全部输入,既麻烦,又显得代码很不美观,这时候我们就可以只截取一部分字符串,用这种方法模糊匹配了。
我们用这种方法来定位百度首页的“新闻”超链接
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过partial_link定位"新闻"这个链接并点击
- driver.find_element_by_partial_link_text('闻').click()
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
7、xpath定位:find_element_by_xpath()
前面介绍的几种定位方法都是在理想状态下,有一定使用范围的,那就是:在当前页面中,每个元素都有一个唯一的id或name或class或超链接文本的属性,那么我们就可以通过这个唯一的属性值来定位他们。
但是在实际工作中并非有这么美好,有时候我们要定位的元素并没有id,name,class属性,或者多个元素的这些属性值都相同,又或者刷新页面,这些属性值都会变化。那么这个时候我们就只能通过xpath或者CSS来定位了。
代码:
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过xpath定位搜索框,并输入selenium
- driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
8、CSS定位:find_element_by_css_selector()
这种方法相对xpath要简洁些,定位速度也要快些,但是学习起来会比较难理解,这里只做下简单的介绍。
CSS定位百度搜索框
- # coding = utf-8
- from time import sleep
- from selenium import webdriver
- # 驱动文件路径
- driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
- # 启动浏览器
- driver = webdriver.Chrome(executable_path=driverfile_path)
- # 打开百度首页
- driver.get(r'https://www.baidu.com/')
- # 通过CSS定位搜索框,并输入selenium
- driver.find_element_by_css_selector('#kw').send_keys('selenium')
- # 等待5秒
- sleep(5)
- # 退出
- driver.quit()
Selenium 八种元素定位方法的更多相关文章
- Selenium八种元素定位方法源码阅读
接触过Selenium的都知道元素定位有八种方法,但用不同的方法在执行时有什么区别呢? 元素定位8种方法(Python版),当然还有每一个方法对应的find_elements方法 find_eleme ...
- selenium自动化测试——常见的八种元素定位方法
selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...
- Selenium:八种元素定位方法
前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...
- Selenium之WebDriver元素定位方法
Selenium WebDriver 只是 Python 的一个第三方框架, 和 Djangoweb 开发框架属于一个性质. webdriver 提供了八种元素定位方法,python语言中也有对应的方 ...
- Selenium2+python自动化-八种元素定位(Firebug和Firepath)
前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中 ...
- Selenium-webdriver+八种元素定位
进行Web页面自动化测试,对页面上的元素进行定位和操作是核心.而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基础. 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素 ...
- selenium自动化之元素定位方法
在使用selenium webdriver进行元素定位时,有8种基本元素定位方法(注意:并非只有8种,总共来说,有16种). 分别介绍如下: 1.name定位 (注意:必须确保name属性值在当前ht ...
- selenium常见的元素定位方法
一.获取元素 1)通过谷歌浏览器自动的工具访问百度首页,我们可以看到,页面上的元素都是由一行行的代码组成的,它们之间有层级地组织起来,每个元素之间都有不同的标签和值,我们可以通过这些不同的标签和值来找 ...
- Selenium八种基本定位方式---基于python
from selenium import webdriver driver=webdriver.Firefox() driver.get("https://www.baidu.com&qu ...
随机推荐
- Java8新特性 - 并行流与串行流
并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流. Java8中将并行进行了优化,我们可以很容易的对数据进行并行操作.Stream API可以声明性地通过parallel()和 ...
- 优先队列问题 get it !!
首先 队列的基本用法 头文件 #include<queue> priority_queue < int/string/struct> q// q为队列的名字 基本操作 q.p ...
- Spring Bean的作用域以及lookup-method标签的使用
Spring Framework支持五种作用域,如下图所示: singleton:表示一个容器中只会存在一个bean实例,无论在多少个其他bean里面依赖singleton bean,整个容器都只会存 ...
- core直接获取报异常数据
报异常直接跳转到/Home/Error [ResponseCache(Duration = , Location = ResponseCacheLocation.None, NoStore = tru ...
- axios 内部原理学习记录
前提:一次面试被问到了,axios有什么特点,对比一下ajax.答的很不满意. axios是一个基于Promise的http请求库,可用于浏览器和 Node.可以说是目前最为常用的http库,有必要了 ...
- spark 机器学习 knn 代码实现(二)
通过knn 算法规则,计算出s2表中的员工所属的类别原始数据:某公司工资表 s1(训练数据)格式:员工ID,员工类别,工作年限,月薪(K为单位) 101 a类 8年 ...
- python自动化
自动化测试一些问题 什么是自动化测试? 自动化测试,顾名思义,自动完成测试工作.通过一些自动化测试工具或自己造轮子实现模拟之前人工点点/写写的工作并验证其结果完成整个测试过程,这样的测试过程,便是自动 ...
- 《The One!》团队作业4:基于原型的团队项目需求调研与分析
项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)体验以原型设计为基础的团队软件项目需求获取技巧与方法.(2)学习利用UML模 ...
- 织梦阿里云OSS解决方案
准备工作 申请OSS账号,并且创建一个public-read的bucket.这里需要权限为public-read是因为后面需要匿名访问. 详细步骤 1.开启织梦远程附件功能2.现在织梦还有远程附件还有 ...
- 网站添加logo图片
网站添加log图片 第一种方法 这里使用的图片一般为16*16大小的图片 <link rel="shortcut icon" href="http://xxx.xx ...