selenium-python元素定位技巧(二)
在python-selenium元素定位中,有很多小技巧,在此记录总结
技巧一、有关联关系的元素有交集关系时,必须添加固定等待,整体调试时候也适当增加固定等待,保持代码运行稳定性。下拉的时候选择下拉框有时候也需要等待。
当遇到两个元素有交集依赖(先后)关系,重新加载的时候,需要消耗时间等待,必须添加一个固定等待(备注:一定要固定等待,隐式等待无效)
举例:
下拉框的选择,比如选择省份>城市,在选择省份后一定要添加固定等待后再去选择城市。
代码举例:
driver.find_element(By.XPATH,"//div[@id='project_chosen']").click() #下拉框一的div的定位
time.sleep(1)
driver.find_element(By.XPATH,"/[@title='提成项目1']").click() #下拉框的值的输入
time.sleep(2) #需要固定等待,因为有依赖关系
driver.find_element(By.XPATH,"//div[@id='openedBuild_chosen']").click() #固定等待后再去选择下拉框二
driver.find_element(By.XPATH,"/[@title='OA2.7.2版本1']").click() #选择下拉框二的子选项的值,一定要检查到子选项的值
技巧二、同一个界面,当元素属性相同,但非同一个元素,可利用多属性识别,否则可能会定位元素报错,也可以使用不同的定位方式。
技巧三、某些元素不能定位到,可能是该元素在当前界面所在位置不可见了,解决方案
a、可将鼠标滚动下拉
b、考虑将浏览器最大化处理
c、将浏览器下拉移动到该元素可见的位置。
举例:
element=driver.find_element(By.XPATH,"//div[@id='mailto_chosen']") #当前不可见但是需要下拉滚动条操作的元素
driver.execute_script('arguments[0].scrollIntoView();',element)
element.click()
time.sleep(1) ##必须加等待,否则不准确,再去操作后续元素
driver.find_element(By.XPATH,"//div[@id='mailto_chosen']/div/ul/li[@title='C:测试001']").click() ##可分层定位,先定位到div,再定位到div下面的子选项进行输入。
技巧四、当需要调试一个模块的功能时候,先把能单独拆分的小功能内部调通,再整体调试
技巧五、当定位不到元素时,先定位到该元素的上级,再定位到该元素。
例如:
driver.find_element(By.XPATH,"//div[@id='mailto_chosen']/div/ul/li[@title='C:测试001']").click() ##可分层定位,先定位到div,再定位到div下面的子选项进行输入。
或:
driver.find_element(By.XPATH,"//td[contains(@title,'人工修改提成失败')]").click() #点击标题先定位到当前行,可通过元素定位看出来。
##根据链接进入BUG详情页
driver.find_element(By.XPATH,"//td[contains(@title,'人工修改提成失败')]/a").click() #再通过点击当前行的相对路径方式定位到可点击的BUG的链接点击进入BUG详情
time.sleep(1)
selenium-python元素定位技巧(二)的更多相关文章
- Selenium+Java元素定位之二
//通过完全匹配链接来定位 driver.findElement(By.linkText("新闻")).click(); //通过部分匹配链接来定位 driver.findElem ...
- python+selenium遇到元素定位不到的问题,顺便记录一下自己这次的错误(报错selenium.common.exceptions.NoSuchElementException)
今天在写selenium一个发送邮件脚本时,遇到一些没有找到页面元素的错误.经过自己反复调试,找原因百度,终于解决了.简单总结一下吧,原因有以下几点: 一:Frame控件嵌套,.Frame/Ifram ...
- 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
- 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...
- 《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)
1.简介 按计划今天宏哥继续讲解倚天剑-css的定位元素的方法:ID属性值定位.其他属性值定位和使用属性值的一部分定位(这个类似xpath的模糊定位). 2.常用定位方法(8种) (1)id(2)na ...
- 《手把手教你》系列技巧篇(十九)-java+ selenium自动化测试-元素定位大法之By css下卷(详细教程)
1.简介 按计划今天宏哥继续讲解css的定位元素的方法.但是今天最后一种宏哥介绍给大家,了解就可以了,因为实际中很少用. 2.常用定位方法(8种) (1)id(2)name(3)class name( ...
- selenium界面元素定位
一. Selenium界面元素定位 本文元素定位以das2为例 #导入包 from selenium import webdriver #打开火狐驱动 driver=webdriver ...
随机推荐
- PAT 乙级 -- 1014 -- 福尔摩斯的约会
题目简介 大侦探福尔摩斯接到一张奇怪的字条:"我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm&quo ...
- jquery遍历json的几种方法
for循环: 1 <script> 2 var obj = { 3 "status":1, 4 "bkmsg":"\u6210\u529f ...
- Portswigger web security academy:XML external entity (XXE) injection
Portswigger web security academy:XML external entity (XXE) injection 目录 Portswigger web security aca ...
- surging 基于流媒体服务如何集群分流
前言 最近几年微服务可谓是大火,大家忙着建设微服务,学习微服务如何搭建,微服务技术体系的演变也使得企业公司能支持起灵活,多样化的业务需求和越来越多的访问量,有很多企业用户正在朝着业务中台,SAAS云平 ...
- SpringBoot整合JWT
JWT (整合SpringBoot) 1. 引入依赖 <!-- 引入JWT --> <dependency> <groupId>com.auth0</grou ...
- C++的指针相关概念
引言 初入c++,肯定会对指针这个概念非常熟悉.但是为什么c/c++要使用指针? 其实每一种编程语言都使用指针,指针并不只是C/C++的独有特性.C++将指针暴露给了用户(程序员),而Java和C#等 ...
- Eclipse中System.out.println()快捷键生成方法
输入syso,再按ALT+/,如果不显示,就在输入完整一行 System.out.println(); 之后点击5次shift键,显示是否使用粘滞键,点击是, 再输入sout,再按ALT+/ ...
- Git 系列教程(8)- 远程仓库的使用
查看远程仓库 如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令,它会列出你指定的每一个远程服务器的名称 如果是刚 clone 下来的自己的库,能看到 origin,这是 Gi ...
- Linux x86_64与i386区别之 —— 内存寻址
毫无疑问,不管是32位,还是64位处理器,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是 存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不 ...
- Matlab将数据存为文本文件
dlmwrite :将一个矩阵写到由分隔符分割的文件中. 在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便).于是要保存此类数 ...