目录

一、单数定位

二、复数定位

三、细讲xpath定位

3.1、xpath属性定位

3.2、xpath其他属性

3.3、文本属性

3.4、xpath标签

3.5、xpath层级

3.6、xpath索引

3.7、xpath逻辑运算

3.8、xpath模糊匹配

3.9、表格定位及参数化

3.10、在浏览器中调试xpath语法

四、css定位

五、js和jquery定位

1.通过id获取

2.通过name获取

3.通过标签名选取元素

4.通过CLASS类选取元素

5.通过CSS选择器选取元素

6.执行jquery(js)

六、其它定位

6.1、定位一组元素可用for循环取值

6.2、单选框和复选框


一、单数定位

1.id 定位:find_element_by_id(self, id_)

2.name 定位:find_element_by_name(self, name)

3.class 定位:find_element_by_class_name(self, name)

4.tag 定位:find_element_by_tag_name(self, name)

5.link 定位:find_element_by_link_text(self, link_text)

6.partial_link 定位 find_element_by_partial_link_text(self,link_text)

7.xpath 定位:find_element_by_xpath(self, xpath)

8.css 定位:find_element_by_css_selector(self, css_selector)

driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("乏善可陈")
driver.find_element_by_id("su").click()
driver.find_element_by_name("tj_trnews").click()
driver.find_element_by_class_name("s_ipt").send_keys("123456")
driver.find_elements_by_tag_name("input")[7].send_keys("123")
driver.find_element_by_link_text("贴吧").click()
driver.find_element_by_partial_link_text("hao1").click()
driver.find_element_by_xpath(".//*[@id='kw']").send_keys("YOYO课程")
driver.find_element_by_css_selector("#kw").send_keys("YOYO课程")

by元素定位

find_element()方法只用于定位元素。

它需要两个参数,第一个参数是定位方式,这个由By 提供;第二个参数是定位的值。

在使用By 时需要将By 类导入。

from selenium.webdriver.common.by import By

find_element(By.ID,"kw")

find_element(By.NAME,"wd")

find_element(By.CLASS_NAME,"s_ipt")

等等等

二、复数定位

1.id 复数定位  find_elements_by_id(self, id_)

2.name 复数定位    find_elements_by_name(self, name)

3.class 复数定位   find_elements_by_class_name(self, name)

4.tag 复数定位    find_elements_by_tag_name(self, name)

5.link 复数定位    find_elements_by_link_text(self, text)

6.partial_link 复数定位   find_elements_by_partial_link_text(self, link_text)

7.xpath 复数定位    find_elements_by_xpath(self, xpath)

8.css 复数定位    find_elements_by_css_selector(self,css_selector)

返回的都是list数据类型,用ele[_index]方式定位某一个元素

三、细讲xpath定位

3.1、xpath属性定位

xpath可通过id、name、class属性定位

#1.id定位
driver.find_element_by_xpath("//*[@id='kw']").send_keys("乏善可陈")#2.class定位
#driver.find_element_by_xpath("//*[@class='lb']").click()# #3.name定位
# driver.get("http://192.168.5.15:8018/Default.aspx")   #公司内网
# time.sleep(2)
# driver.find_element_by_xpath("//*[@name='txtUserName']").send_keys("1111111")

3.2、xpath其他属性

也可通过元素中的其他属性定位

#5.其它属性
driver.find_element_by_xpath("//input[@autocomplete='off']").send_keys("222222")

3.3、文本属性

文本属性无@符号

语法:.//*[text()=‘文本内容’]   (重点掌握)

注意:除了这个文本属性匹配是.//*[text()=‘文本’]这种格式(无@)

其它的属性,如id,name,class等都是.//*[@id=‘xxx’]  .//*[@name=‘xxx’]这种格式

#8.text()
driver.find_element_by_xpath("//*[text()='新闻']").click()

3.4、xpath标签

3.3.1、在使用标签定位时,在斜杆后添加标签名

3.3.2、不指定标签定位时,在斜杠后添加*号定位所有符合条件的标签

#tag定位(img标签)
driver.find_element_by_xpath("//img[@id='btnLogin']").click()
#符合条件的素有标签
driver.find_element_by_xpath("//*[@id='btnLogin']").click()

3.5、xpath层级

在元素属性不是很明确的情况下我们可以先定位导其父元素再选择元素

/  寻找下一级元素,   ..寻找父元素

#9.层级关系(根据父元素找子元素)
driver.find_element_by_xpath("//*[@id='wrap']/div/div/ul/li[3]").click()
driver.find_element_by_xpath("//*[@id='wrap']/div//li[3]").click()
#10.层级关系(根据子元素找父元素)
driver.find_element_by_xpath("//*[@id='news']/../../li[4]").click()

3.6、xpath索引

多个相同元素是同一个父元素,单数定位,可使用索引定位(索引从1开始,与Python中不同)   eg://*[@id='wrap']/div//li[3]"

#6.索引
driver.get("https://www.sogou.com/")
driver.find_element_by_xpath("//*[@id='sf']/span[1]/input").send_keys("乏善可陈")

多个元素相同不是同一个父元素(Python中的索引定位,从0开始)

使用xpath复数定位,返回一个list,根据索引定位

driver.find_elements_by_xpath("//*[@name='txtUserName']")[0].send_keys("1111111")

3.7、xpath逻辑运算

1.xpath 还有一个比较强的功能,是可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)

2.一般用的比较多的是 and 运算,同时满足两个属性

#7.多个属性组合
driver.find_element_by_xpath("//a[@id='news' and @uigs-id='nav_news']").click()

3.8、xpath模糊匹配

#11.模糊匹配(文字匹配)
driver.find_element_by_xpath("//*[contains(text(),'英文')]").click()
#12.模糊匹配(属性匹配)
driver.find_element_by_xpath("//*[contains(@id,'query')]").send_keys("1111111")

3.9、表格定位及参数化

// 双斜杠 元素下的所有标签(多层)    / 单斜杠 子元素(一层)

#参数化
x = 2
y = 3
xpathStr = "//*[@id='login-form']//tbody//tr[%s]/td[%s]/input" %(x,y)
driver.find_element_by_xpath(xpathStr).click()#表格定位
driver.find_element_by_xpath("//*[@id='login-form']//tbody//tr[2]/td[1]/input").send_keys("11111111")

3.10、在浏览器中调试xpath语法

Firefox上的Firepath插件是调试xpath语法的最佳工具

注意:如果有iframe情况,左上角先切换到对应的iframe上

chrome自带的   F12之后,点开console

输入格式:$x(“xpath语法”)  然后回车

eg  :  $x(".//*[@name='email']")

四、css定位

#1.id选择器
driver.find_element_by_css_selector("#kw").send_keys("乏善可陈")#2.class选择器
driver.find_element_by_css_selector(".s_ipt").send_keys("11111")#3.标签
driver.find_element_by_css_selector("input").send_keys("不能实现,只练习语法")#4.其他属性
driver.find_element_by_css_selector("[autocomplete='off']").send_keys("2222")
driver.find_element_by_css_selector("[name='wd']").send_keys("333333")#5.同时满足多个元素(可用逗号隔开也可不用)
driver.find_element_by_css_selector("#kw,[class='.s_ipt'][name='wd']").send_keys("333333")#6.子元素选择器
driver.find_element_by_css_selector("form>.bg.s_ipt_wr.quickdelete-wrap>input").send_keys("4444444")#7.组合定位(多种定位类型)
driver.find_element_by_css_selector("#form.fm>span>#kw.s_ipt[autocomplete='off']").send_keys("5555555")#8.:nth-child()  定位到一组数据取第几个
driver.find_element_by_css_selector("#u>a:nth-child(1)").click()#9.后代元素选择器(空格隔开)
driver.find_element_by_css_selector("#form #kw").send_keys("6666666")#10.毗邻元素选择器(+)
driver.find_element_by_css_selector(".bg.s_ipt_wr.quickdelete-wrap+span>input").click()
driver.back()#11.同级元素选择器(~)
driver.find_element_by_css_selector(".bg.s_ipt_wr.quickdelete-wrap~span>input").click()

五、js和jquery定位

1.通过id获取

document.getElementById(“id”)----------获取的是单个

2.通过name获取

document.getElementsByName(“Name”)[0]---------获取的是多个返回的是list

3.通过标签名选取元素

document.getElementsByTagName(“tag”) --------获取的是多个返回的是list

4.通过CLASS类选取元素

document.getElementsByClassName(“class”) --------获取的是多个返回的是list

兼容性:IE8及其以下版本的浏览器未实现getElementsByClassName方法

5.通过CSS选择器选取元素

document.querySelectorAll(“css selector")

兼容性:IE8及其以下版本的浏览器只支持CSS2标准的选择器语法

6.执行jquery(js)

'''Jquery定位执行'''
driver.get("http://47.104.190.48:8088/zentao/user-login-L3plbnRhby8=.html")
time.sleep(1)
jq = '''
$("[name='account']").val("test123")
$("[name='password']").val("!@123456")
$("#submit").click()
'''
driver.execute_script(jq)       #执行js语句

六、其它定位

6.1、定位一组元素可用for循环取值

t = driver.find_elements_by_class_name("mnav")
for i in t:print i.text

6.2、单选框和复选框

#1.定位单选框
driver.find_element_by_id("boy").click()
time.sleep(5)
driver.find_element_by_id("girl").click()#2.定位复选框
#2.1选中一个
driver.find_element_by_id("c1").click()
time.sleep(5)
#2.2选多个选(第一个选中变取消)
check = driver.find_elements_by_xpath("//input[@type='checkbox']")      #list类型不能直接点击
for i in check:i.click()

webdriver中常用的定位方法相关推荐

  1. 统计计量 | 统计学中常用的数据分析方法汇总

    来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...

  2. 5种JavaScript中常用的排序方法

    5种JavaScript中常用的排序方法 01.冒泡排序 通过相邻数据元素的交换,逐步将待排序序列变为有序序列,如果前面的数据大于后面的数据,就将两值进行交换,将数据进行从小到大的排序,这样对数组的第 ...

  3. 深度学习中常用的误差方法

    深度学习中常用的误差方法有: 标准差(Standard Deviation): 标准差也叫均方差,是方差的算术平方根,反应数据的离散程度 ,标准差越小,数据偏离平均值越小,反之亦然 . 公式为: py ...

  4. VB的一些项目中常用的通用方法-一般用于验证类

    1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer '20060728 Dim mycha ...

  5. 光滑噪声数据常用的方法_数据挖掘中常用的数据清洗方法

    是新朋友吗?记得先点蓝字关注我哦- 数据挖掘中 常用的数据清洗方法 在数据挖掘过程中,数据清洗主要根据探索性分析后得到的一些结论入手,然后主要对四类异常数据进行处理,分别是缺失值(missing va ...

  6. Selenium webdriver中的xpath定位

    使用selenium进行自动化测试,其实很多时候就是模拟用户的操作,在前端页面对元素进行操作,因此元素的定位在自动化测试中是至关重要的.关于如何 使用id,className,name,linkTex ...

  7. lammps和atomsk中常用的建模方法

    文章目录 1.Atomsk生成刃型位错 2.Atomsk生成任意角度晶界 3.Atomsk生成孪晶 4.Atomsk生成非晶 5.合金多晶结构建模 6.Atomsk建立管道类模型 7.Atomsk建立 ...

  8. MPI中常用的通信方法

    MPI中常用的通信方法 问题描述 梯形法求解积分的串行程序 使用MPI并行化 使用树形结构优化通信 使用MPI_Reduce优化通信 使用MPI_Bcast优化通信 使用派生数据类型优化通信 使用结构 ...

  9. 夺命雷公狗jquery---18jquery中常用属性(方法)

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...

最新文章

  1. 巧用FTP命令进行文件传输
  2. 第二章matlab数据及其运算,第2章 MATLAB数据及其运算_习题答案
  3. .bashrc和.vimrc以及一些比较有用的linux命令
  4. 记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
  5. 小程序源码:微信零钱模拟器
  6. 川大计算机学梡分数线,2017四川大学历年录取分数线
  7. java tiff 压缩,使用Java ImageIO进行Tiff压缩
  8. 企业如何做好数据防泄漏需求分析
  9. 云呐|fsu动环监控单元是什么,fsu动环监控单元特点
  10. 彻底删除windos8 打印机驱动程序
  11. Intellij IDEA 将.java文件识别成文本文档
  12. C语言实现zbuffer消隐算法,基于图像的重建,image-based reconstruction,音标,读音,翻译,英文例句,英语词典...
  13. IOS 自定义 滑动返回 手势
  14. POI操作word 换行
  15. linux防火墙删除ip白名单命令,利用CentOS系统IPtables防火墙添加网站IP白名单
  16. 无懈可击的web设计笔记
  17. 内网转发工具EW的使用
  18. java 多图片拼接 转 视频 AVI
  19. .set_global_opts(title_opts) 设置标题
  20. python根据地址获取经纬度,通过经纬度获取地址并反写入excel

热门文章

  1. html css画五角星,CSS怎么画五角星?
  2. MyBatis:Invalid bound statement (not found)
  3. Unity3D游戏开发实习生日志——自己就是一个啥都不知道的小小白
  4. 我有一瓢酒,可以慰风尘。—第九天
  5. 跨站点脚本 (XSS)
  6. 用附近的3G网络组网
  7. 梦幻诛仙linux纯端架设教程,【梦幻诛仙】【双端手游】【最完美,最全的,视频架设教程】...
  8. DOS (DOS操作系统)
  9. 几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?
  10. 如何用ZBrush快速雕刻LOL中的Lissandra