引包部分

from selenium.webdriver.chrome.webdriver import WebDriver#谷歌浏览器为例
from selenium.webdriver.common.by import By#本文采用“By.XXX”的方式
import time#经常需要强制等待、显式等待、隐式等待→等待页面元素布局刷新
self.dr=WebDriver()#在测试类中实例化1个局部浏览器
GlobalDr=WebDriver#或者在测试类中实例化1个全局浏览器

8大定位方式

方式1:By.ID
self.dr.find_element(By.ID,‘XXX’)#通过ID属性定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.ID, ‘XXX’)#通过ID属性定位多个元素,结果为列表
self.dr.find_elements(By.ID, ‘XXX’)[3]#通过ID属性定位多个元素中的第3个
此处需注意,python中列表索引从0开始,但驱动浏览器执行时,相关执行语言中索引是从1开始哦!
方式2:By.NAME
self.dr.find_element(By.NAME,‘XXX’)#通过NAME属性定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.NAME, ‘XXX’)#通过NAME属性定位多个元素,结果为列表
self.dr.find_elements(By.NAME, ‘XXX’)[3]#通过NAME属性定位多个元素中的第3个
方式3:By.CLASS_NAME
self.dr.find_element(By.CLASS_NAME,‘XXX’)#通过类名定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.CLASS_NAME, ‘XXX’)#通过类名定位多个元素,结果为列表
self.dr.find_elements(By.CLASS_NAME, ‘XXX’)[3]#通过类名定位多个元素中的第3个
方式4:By.TAG_NAME
self.dr.find_element(By.TAG_NAME,‘XXX’)#通过标签名定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.TAG_NAME, ‘XXX’)#通过标签名定位多个元素,结果为列表
self.dr.find_elements(By.TAG_NAME, ‘XXX’)[3]#通过标签名定位多个元素中的第3个
方式5:By.LINK_TEXT
self.dr.find_element(By.LINK_TEXT,‘XXX’)#通过超链接(a标签)的文本定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.LINK_TEXT, ‘XXX’)#通过超链接(a标签)的文本定位多个元素,结果为列表
self.dr.find_elements(By.LINK_TEXT, ‘XXX’)[3]#通过超链接(a标签)的文本定位多个元素中的第3个
方式6:By.PARTIAL_LINK_TEXT
self.dr.find_element(By.PARTIAL_LINK_TEXT,‘XXX’)#通过超链接(a标签)的部分文本定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.PARTIAL_LINK_TEXT, ‘XXX’)#通过超链接(a标签)的部分文本定位多个元素,结果为列表
self.dr.find_elements(By.PARTIAL_LINK_TEXT, ‘XXX’)[3]#通过超链接(a标签)的部分文本定位多个元素中的第3个
方式7:By.CSS_SELECTOR(几乎万用,更切合前端CSS样式语言)
self.dr.find_element(By.CSS_SELECTOR,‘XXX’)#通过CSS选择器定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.CSS_SELECTOR, ‘XXX’)#通过CSS选择器定位多个元素,结果为列表
self.dr.find_elements(By.CSS_SELECTOR, ‘XXX’)[3]#通过CSS选择器定位多个元素中的第3个
未完待续
方式8:By.XPATH(几乎万用,更切合后端XML语言)
self.dr.find_element(By.XPATH,‘XXX’)#通过XPATH定位唯一元素,多个的话默认取第一个
self.dr.find_elements(By.XPATH, ‘XXX’)#通过XPATH定位多个元素,结果为列表
self.dr.find_elements(By.XPATH, ‘XXX’)[3]#通过XPATH定位多个元素中的第3个
xpath细节://div[1] 不同于 (//div)[1] ,前者表示任意层级下的第一个xpath,后者表示全部(//div)中的第一个,xpath不是编程语言,索引是从1开始的

注意

1、其实有些公司为了脚本维护方便,人员交流方便,要求员工统一格式,都使用XPATH或者CSS_SELECTOR;
ps:博主都用过,直接说结论:xpath是万能最优解,而且简单,适合团队推广;css不支持selenium的父节点(/…)、文本【text(),contains()】、appium、子元素的次序范围(position)、前面的兄弟节点(preceding-sibling::*),由此落入下乘;
2.常用的配合等待模式:
①强制等待(单次作用)—time.sleep(XXX)—程序休眠XXX秒后再执行;
②显示等待(单次作用)—
③隐式等待(设定后永久作用)—driver.implicitly(15)
3.运行时NoSuchElement的常见原因:
总-NoSuchElement:动态→sleep→iframe
①等待时间不够,网页元素还未完成刷新布局→增加等待时间即可;
②元素定位方式错误→检查看是不是前端代码更新?
③是不是有框架iframe的切换?是不是有警告框的切换?是不是有新窗口(窗口句柄切换)的跳转?
④你的定位写错了→在浏览器中F12开发者模式Control+Find下用你的定位方式,看能不能定位到元素(XPATH定位法时)?
⑤动态定位属性→换成静态定位属性。
⑥切换window,警告框。
4.配套常用’文本查找’操作:control+find,control+shift+find
5.快速定位语法错误:F2
6.python包安装失败处理方式:①重启重试②直接用批处理文件.bat③不管,后续报错时直接复制他人现成的py模块就行。
7.常见引包错误-循环引用→po模型只允许高层引用底层,不允许同级互相引用,不允许下层引用上层
8.常用pytest批量执行命令:

if __name__=='__main__':pytest.main(['-vs','-rs','--lf',f'--html={测试报告路径}',#{用例搜集路径}])

定位失败原因总结:
1、定位写错:前端代码可不是那么稳定,可能已经更新修改了哦,仔细检查,更正定位;
2、等待时间不足(最常见原因):即使有了隐式/显示等待,也不可高枕无忧,因为会有“页面元素已加载,但后端接口还未加载好”的情况,这时老老实实使用time.sleep()吧;
3、元素是动态的:需要寻找不变的规律,或者try except多尝试几次,只使用正确的那一次
3、框架集iframe的切换:查找关键字frame,看是不是有框架集的切换
4、句柄切换:即网页切换,要用WebDriver的switch_window()方法切换
5、警告弹框:要用WebDriver的switch_to.alert方法簇进行操作
6、canvas画布:比较新的前端技术,画布标签,可以用坐标轴处理,如图:

7、页面循环点击失效:页面元素点击后,地址会发生变化,第二次点击要重新定位
8、元素不可交互:要么换成更大/更小的标签,要么先定位点击父级标签,再点击子级标签
口诀:动态sleep-iframe,句柄警告canvas,循环点击不交互

ps:遇到鼠标悬停的动态隐藏H5代码,想要抓取其Html代码,可以鼠标不动,使用快捷键去查看与复制。
↑↓:移动
←:收缩H5标签
→:展开H5标签
Enter:进入标签内
Esc:退出标签
Shift+方向键:字符串选择
Control+C:复制(也可以使用系统键-SystemRequire/PrintScreen)

Selenium WebDriver元素定位方式+定位失败原因总结相关推荐

  1. Selenium webdriver中的xpath定位

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

  2. Selenium Webdriver元素定位的八种常用方式

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  3. 【转载保存】Selenium Webdriver元素定位的八种常用方式

    转载地址:https://www.cnblogs.com/qingchunjun/p/4208159.html

  4. android 获取元素的下标_Appium中定位方式by_android_uiautomator

    在appium定位方式中可以通过by_android_uiautomator方法定位元素. 基本语法:driver.find_element_by_android_uiautomator(" ...

  5. Android定位方式和测试方法

    Android常用的三种定位方式有:基于GPS定位.基于基站地位.基于wifi定位. 1.基于GPS定位: GPS定位需要GPS模块(硬件)的支持,没有GPS模块是无法进行GPS定位的. GPS定位最 ...

  6. 移动端自动化==Appium定位方式总结

    1.ID Android Android的resource-id对应ID定位方式,可以通过index来获取需要的元素(从0开始查找dom树中的同名resource-id属性).使用appium-des ...

  7. Appium定位方式总结

    lassName Android Android的class属性对应ClassName定位方式,ClassName一般都是会重复的,可以通过index来获取需要的元素.(从0开始查找dom树中的同名c ...

  8. selenium+webdriver错误...exceptions.ElementNotInteractableException: Message: Element is not visible处理

    这几天在自学python+selenium自动化测试,遇到一个小问题,折腾了半天,一个偶然的操作竟然解决了.程序报的错误为"selenium.common.exceptions.Elemen ...

  9. selenium webdriver (python)的基本用法一

    阅在线 AIP 文档: http://selenium.googlecode.com/git/docs/api/py/index.html 目录 一.selenium+python 环境搭建..... ...

最新文章

  1. java二维数组从键盘更改_互换二维数组的行列。要求数组的行数、列数以及各元素均从键盘输入;输出互换前数组内容和互换后数组内容。(要求循环输入进行测试)Java...
  2. 心得丨老生常谈:普通程序员到底如何入门深度学习?
  3. 登录注册的基本加密方法(可逆)
  4. TinyXml帮助文档
  5. java jigsaw_60秒内使用Java 9的Project Jigsaw的JavaFX HelloWorld
  6. oracle emctl start
  7. 怎样访问远程服务器文件夹,远程访问服务器文件夹
  8. cadence设计运算放大器_「好设计论文」一种用于高精度DAC的实用型CMOS带隙基准源...
  9. 载入java VM时出错216_Android6.0中oat文件的加载过程
  10. 银联在线支付B2C UnionPay.NET
  11. Rayman的绝顶之路——Leetcode每日一题打卡7
  12. 零基础应如何学习UI设计
  13. 可能改变前端工程化未来的特性:ESM Loader Hooks
  14. ONF(Open Networking Foundation)
  15. ROS系列:第六章 机器人建模
  16. 湘潭市古城中学《西游记》手抄报活动作品展示
  17. IT十八掌 大数据技术资料+内部资料
  18. unityAndroid9.0不能下载AB包的问题
  19. mysql 过滤微信昵称表情_微信昵称emoji表情的过滤
  20. Django 基于类的通用视图详解

热门文章

  1. python打乱迭代器_嗯哼python随机(迭代器,正则,函数自定义,异常处理)
  2. 王爽老师版汇编语言课程设计2
  3. itchat 登录原理
  4. 软件测试——0527作业
  5. S7200-SMART系统手册笔记(1)
  6. BREW J2ME相得益彰
  7. python爬虫之xpath和lxml应用—爬取豆瓣评分爬取
  8. QQ的账号登录及PHP api操作
  9. 《黑客与画家》读书笔记二
  10. M1芯片Mac安装brew和brew常用命令(附:安装docker)