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的四种等待方式,合理的使用等待对代码的稳定性,测试效率都有很大的提高 隐式等待:是在尝试发现某个元素的时候,如果没能立刻发现 ...
随机推荐
- JAVA Selenium PHONCOMJS 获取js动态生成完整网页
首先需要在maven的pom.xml中包含以下依赖 <dependency> <groupId>com.github.detro</groupId> <art ...
- Hydra 无法爆破SSH 解决办法
今天测试ssh爆破,发现使用hydra有些问题,windows版本没有协议支持其他的貌似都可以,kali本身也有hydra环境但是也会出现问题,所以就搜了一些资料贴在这里,当然这也是我测试过的,重新编 ...
- C#中使用SQLite数据库简介(下)
[SQLite管理工具简介] 推荐以下2款: Navicat for SQLite:功能非常强大,几乎包含了数据库管理工具的所有必需功能,操作简单,容易上手.唯一的缺点是不能打开由System.Dat ...
- Android -- 发送Broadcast、有序无序
普通广播 优缺点:和有序广播的优 ...
- 【转】6 Reasons Why JavaScript’s Async/Await Blows Promises Away (Tutorial)
原文:https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec105 ...
- 【转】vim折叠功能
原文:https://www.yupengsir.com/topic/content?i=140 这个作者的vim系列是高级的用法, 要学习一下. https://blog.easwy.com/arc ...
- TCP/IP具体解释学习笔记——地址解析协议ARP
一 概述 我们知道,IP协议是用来在不同的物理网络之间数据传输的.要在不同的网络之间数据传输,至少须要将IP协议所用的地址转换成特定网络所使用的物理地址. 一般来说.就是将IPv4地址转换为mac地址 ...
- Android之横屏竖屏显示问题
1.採用不同的布局文件 在res下创建目录layout-land 在该目录下写入的layout(xml文件)横屏的时候系统自己主动选择显示的layout 同理: 在res下创建目录layout-por ...
- Python 创建包含列表的元组
“可变”的tuple前面我们看到了tuple一旦创建就不能修改.现在,我们来看一个“可变”的tuple:>>> t = ('a', 'b', ['A', 'B'])注意到 t 有 3 ...
- vue的全家桶
自定义指令 <div v-demo="{ color: 'white', text: 'hello!' }"></div> Vue.directive('d ...