在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元素定位技巧(二)的更多相关文章

  1. Selenium+Java元素定位之二

    //通过完全匹配链接来定位 driver.findElement(By.linkText("新闻")).click(); //通过部分匹配链接来定位 driver.findElem ...

  2. python+selenium遇到元素定位不到的问题,顺便记录一下自己这次的错误(报错selenium.common.exceptions.NoSuchElementException)

    今天在写selenium一个发送邮件脚本时,遇到一些没有找到页面元素的错误.经过自己反复调试,找原因百度,终于解决了.简单总结一下吧,原因有以下几点: 一:Frame控件嵌套,.Frame/Ifram ...

  3. 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  4. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  5. 《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  6. 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  7. 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)

    1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...

  8. 《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)

    1.简介 按计划今天宏哥继续讲解倚天剑-css的定位元素的方法:ID属性值定位.其他属性值定位和使用属性值的一部分定位(这个类似xpath的模糊定位). 2.常用定位方法(8种) (1)id(2)na ...

  9. 《手把手教你》系列技巧篇(十九)-java+ selenium自动化测试-元素定位大法之By css下卷(详细教程)

    1.简介 按计划今天宏哥继续讲解css的定位元素的方法.但是今天最后一种宏哥介绍给大家,了解就可以了,因为实际中很少用. 2.常用定位方法(8种) (1)id(2)name(3)class name( ...

  10. selenium界面元素定位

    一.        Selenium界面元素定位 本文元素定位以das2为例 #导入包 from selenium import  webdriver #打开火狐驱动 driver=webdriver ...

随机推荐

  1. 【python】Leetcode每日一题-直方图的水量(接雨水)

    [python]Leetcode每日一题-直方图的水量(接雨水) [题目描述] 给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1. 上面是由数组 ...

  2. 1 cmd

    打开cmd 在终端打开指定文件 按住alt+e打开我的电脑 ​ 补充: ​ 1.windows和+组合快捷键 放大镜,(同理windows -) 然后在地址栏输入cmd,回车即可 常用命令 #盘符切换 ...

  3. 解决docker镜像无法删除的问题

    发现问题 来自守护进程的错误响应:冲突:无法删除050f26b6caca(必须强制) - 映像在多个存储库中被引用 Error response from daemon: conflict: unab ...

  4. php 获取某年后的日期

    比如两年后:date('Y-m-d',strtotime('+2 year')) 月份year改成month

  5. jquery中定义数组并给数组赋值后转为json格式为[]问题的解决

    一.问题描述:jquery定义一个空数组,并赋值,结果转为json格式后打印值为空 我原本是这样写的,但是show_data值一直为[] var export_data = [];export_dat ...

  6. springboot优雅的异常处理

    springboot全局异常处理 @ControllerAdvice 尽管springboot会对一些异常进行处理,不过对于开发者来说,这还不太便于维护,因此我们需要自己来对异常进行统一的捕获与处理. ...

  7. Windows进程间通讯(IPC)----WM_COPYDATA

    WM_COPYDATA通讯思路 通过向其他进程的窗口过程发送WM_COPYDATA消息可以实现进程间通讯. 只能通过SendMessage发送WM_COPYDATA消息,而不能通过PostMessag ...

  8. Codeforces Round #712 (Div. 2)

    A. Déjà Vu 题意:就是问能否加上字母a,使得字符串不中心对称 思路:只有一种情况不能加入,就是全部是a,剩下的都可以满足,找a的位置就找哪个字母不是a,然后让它的对称位置是新加的这个a 代码 ...

  9. base64stego 还不懂base64的隐写,详解15行代码带你领略

    网上写了好多关于xctf MISC新手篇的base64Stego隐写的教程,但大都不太清楚,基本上都是讲了一段隐写原理,直接上代码了.但是代码是这道题的关键,代码讲了如何解码这个隐写的完整流程,这次我 ...

  10. 使用Qt实现一个必应壁纸客户端

    概要 必应的每日壁纸很好看,但是看不到一周以前的壁纸图片,日前使用python开发了必应壁纸收集站,可惜这样的收集站只能在线浏览,我在想要是有一款软件能够下载每日必应壁纸,并应用到windows的桌面 ...