Selenium 之18 种定位方式
1 id 定位 driver.find_element_by_id()
HTML 规定id 属性在HTML 文档中必须是唯一的。这类似于公民的身份证号,具有很强的唯一性
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://ui.imdsx.cn/uitester/')
driver.maximize_window() #最大化当前窗口
driver.execute_script('window.scrollTo(0,0);')
#执行JavaScript语句,通过js 来操作滚动条
driver.find_element_by_id('i1').send_keys(111)
2 name 定位 driver.find_element_by_name()
HTML 规定name 来指定元素的名称,因此它的作用更像是人的姓名
driver.find_element_by_name('name').send_keys(111)
3 class 定位 driver.find_element_by_class()
HTML 规定class 来指定元素的类名
driver.find_element_by_class_name('classname').send_keys(111)
4 tag 定位(标签名定位) driver.find_element_by_tag_name()
HTML 的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag
因为一个tag 往往用来定义一类功能,所以通过tag识别某个元素的概率很低
一个页面都会有大量的<div> ,<input> <a> 等tag ,所以很难通过标tag name 去区分不同的元素
driver.find_element_by_tag_name('input').send_keys('tag-name')
#默认写入第一个input 标签内
5 link text 定位(文本定位) driver.find_element_by_link_text()
代码 <a href="http://www.imdsx.cn">跳转大师兄博客地址</a>
driver.find_element_by_link_text('跳转大师兄博客地址').click()
通过上面的代码发现, find_element_by_link_text()方法通过元素标签对之间的文本信息来定位元素
6 partial link 定位 driver.find_element_by_partial_link_text()
partial link 定位是对link 定位的一种补充,有些文本链接会比较长,这个时候可以取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接
driver.find_element_by_partial_link_text('师兄博客地址').click()
通过上面的代码发现, find_element_by_partial_link_text()方法也是通过元素标签对之间的文本信息来定位元素
7 Xpath 定位 driver.find_element_by_xpath()
XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素
XPath 使用方法
7.1 //* 定位页面下所有元素
7.2 绝对路径定位
7.3 利用元素属性定位
driver.find_element_by_xpath('//input[@placeholder="请通过XPATH定位元素"]')
driver.find_element_by_xpath('//*[@placeholder="请通过XPATH定位元素"]')
//表示当前页面某个目录下
input 表示定位元素的标签名,如果不想指定标签名,用* 代替
[ ] 固定格式
@ 表示引用某样属性
placeholder="请通过XPATH定位元素" 元素的属性值
知识扩展:
使用绝对路径定位的缺点:前端修改层级后,之前的case报废
通过属性定位的方式可以提高容错率
7.4 层级与属性结合(层级过滤)
当标签页重复时,Xpath提供了层级过滤
例如:找不到儿子,那么就先找他的爸爸,实在不行可以再找他的爷爷
//form/div/input[@placeholder="用户名"]
支持通过 / 进行层级递进,找到符合层级关系的标签
一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。Xpath提供了索引过滤
通过索引,在List中定位属性,与python的索引有些差别,Xpath从1开始
8 CSS 定位 driver.find_element_by_css_selector()
Css Selector定位实际就是HTML的Css选择器的标签定位
CSS 选择器常用语法如下图:(参考链接 http://www.w3school.com.cn/cssref/css_selectors.asp)


8.1 通过class 属性定位
. 代表通过class属性来定位元素 .c1
8.3 通过属性定位
9 用By 定位元素 driver.find_element()
通过查看Webdriver 的底层实现代码发现:
以上八种定位方式,最后都是调用find_element() 方法
它需要两个参数,第一个参数是定位的类型,由BY 提供,第二个参数是定位的具体方式
满足W3C 最后都是通过BY.CSS_SELECTOR 方法定位
底层代码如下:
def find_element(self, by=By.ID, value=None):
"""
'Private' method used by the find_element_by_* methods. :Usage:
Use the corresponding find_element_by_* instead of this. :rtype: WebElement
"""
if self.w3c:
if by == By.ID:
by = By.CSS_SELECTOR
value = '[id="%s"]' % value
elif by == By.TAG_NAME:
by = By.CSS_SELECTOR
elif by == By.CLASS_NAME:
by = By.CSS_SELECTOR
value = ".%s" % value
elif by == By.NAME:
by = By.CSS_SELECTOR
value = '[name="%s"]' % value
return self.execute(Command.FIND_ELEMENT, {
'using': by,
'value': value})['value']
10 以上九种定位方式的复数形式
elements返回list 用角标取值
需要循环的时候用复数形式
driver.find_elements_by_class_name('classname')[0].send_keys('111')
Selenium 之18 种定位方式的更多相关文章
- selenuim中18种定位方式
18种定位方式=8种单数形式+8种复数形式+2种底层方案 单数可以确定唯一,复数无法确定: 单数形式定位,返回的是一个元素,复数形式,返回的是一个列表,返回的是当前页面所有符合要求的元素,没有意义 一 ...
- Selenium学习之==>18种定位方式的使用
Selenium的定位方式一共有18种,单数8种,复数8种,最后两种是前面这16种的底层封装 单数形式8种 # 1.id定位 al = driver.find_element_by_id('i1') ...
- selenium WebDriver 八种定位方式源码
/* * 多种元素定位方式 */ package com.sfwork; import java.util.List; import org.openqa.selenium.By; import or ...
- selenium基础--五种定位方式
find_element_by_name find_element_by_id find_element_by_xpath find_element_by_link_text find_element ...
- Selenium WebDriver 8大定位方式
Selenium WebDriver 8大定位方式: driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...
- Android中几种定位 方式
介绍的几种定位方式 http://www.cnblogs.com/cuihongyu3503319/p/3863867.html 百度地图api: http://lbsyun.baidu.com/in ...
- android 三种定位方式
http://www.cnblogs.com/oudi/archive/2012/03/22/2411509.html 最近在看android关于定位的方式,查了很多资料,也做了相关实验,在手机上做了 ...
- Java + Selenium + WebDriver八大元素定位方式
UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...
- Selenium&Appium四种等待方式
一.摘要 本博文主要介绍自动化测试中,无论是selenium或是Appium的四种等待方式,合理的使用等待对代码的稳定性,测试效率都有很大的提高 隐式等待:是在尝试发现某个元素的时候,如果没能立刻发现 ...
随机推荐
- Qt控件中的属性sizePolicy说明
1. Fixed: 大小不能改变 2. Minimum: 已经是最小, 不能再被缩小, 但能放大. 3. Maximum: 已经是最大, 不能再被放大, 但能缩小. 4. Preferred: 控件 ...
- c#抓去网页
c#利用WebClient和WebRequest获取网页源代码的比较 2011-11-28 10:26:42 我来说两句 收藏 我要投稿 C#中一般是可以利用WebClient类和WebReq ...
- MySQL数据类型varchar详解
1.varchar(N)的逻辑意义从MySQL 4.1开始,varchar(N)中的N指的是该字段最多能存储多少个字符(characters),不是字节数.不管是一个中英文字符或者数字.或者一个汉字, ...
- VB开发ActiveX控件的一些记录
注意,下面很多语句的用法,不能放在Private Sub UserControl_Initialize()里使用,要放在Private Sub UserControl_InitProperties() ...
- Fragment 创建 传递参数 跳转【典例】
Fragment一定要有一个无参的构造方法! 因为当Activity因屏幕旋转或者因内存不足被系统杀死时,会导致Activity被重新创建,而当Activity被重建时,FragmentManager ...
- Android实战简易教程-第二十八枪(基于Bmob实现头像图片设置和网络上传功能!)
上一篇我们介绍了怎样由uri转换成String ,本文就用到了上篇文章的方法.以下我们介绍一下怎样设置头像后将头像图片上传到云端的方法,本文基于Bmob提供的服务. 看一下代码:(布局文件和前两篇文章 ...
- 要点Java20 java.util.Collections
java.util.Collections 集合帮助类 演示样例程序(JUnit演示) 排序 @Test public void testSort() { List<Integer> de ...
- 换掉Tomcat默认图标
将<Tomcat_home>下的/webapps/ROOT的favicon.ico替换成你自己的图标,名还得是这个名. 然后清除浏览器缓冲,webapp默认的小猫图标就被换掉了. 效果如下 ...
- 极客Web开发资源大荟萃
前端开发已经成为当前炙手可热的技术之一.此次我们总结的前端开发包含了相关技术和流行趋势,希望从中大家可以挖掘你们所需要的,并带给你们最有价值的帮助!原文来自:极客标签 使用代码回放来愉快地学习前端知识 ...
- Asp.net视图状态的作用
视图状态(view state)是在单个页面中保存信息的第一选择,ASP.NET Web控件也使用试图状态在回发间保存属性值.通过页面内建的 ViewState 属性,你可以把自己的数据放入到视图状态 ...