相关问题:

  • 定位方法有几种,分别是?
  • 什么原因导致的定位不到元素?
  • 隐藏元素如何定位?
  • 如何定位动态元素?
  • 通过子元素定位父元素?
  • 如何判断一个页面上元素是否存在?
  • 有的元素就加载也页面上,但是你却定位不到?
  • 一个元素明明定位到了,也点击无效没有报错

问题分类:

  • 元素定位
  • 元素定位不到
  • 元素操作
  • 元素是否在页面存在

元素是否在页面存在?

  • 方法:通过查看当前页面dom,搜索该元素是否存在。如果是脚本自动化运行过程中,应该通过打印 page_source,即可了解到该元素在运行过程中是否存在。
  • ------【自动化关键数据记录

元素定位

问题 方法 知识点
Selenium 定位方法有几种? 八种定位方式,常用的为id、name、css、xpath 常见控件定位方法
通过子元素定位父元素? 编写 xpath 定位 高级定位-xpath

元素操作

问题 原因 方法 知识点
一个元素明明定位到了,也点击无效没有报错 1. 异步加载JS导致点击不到 循环点击该按钮,直到生效为止 显示等待
  2. app突然出现弹框,导致元素遮挡 通过添加黑名单,异常处理解决 弹框处理
Selenium 中隐藏元素如何定位、操作 隐藏元素可以直接定位,但是无法直接点击或者交互 使用JS执行交互操作 【执行 Javascript 脚本】
如何获取app 中的toast 消息提示 toast 闪过太快,不过定位 直接通过xpath 定位结合隐式等待获取 特殊控件toast 识别

元素定位不到

NoSuchElementException 报错

1)定位不正确

  • 方法:在console 先测试定位是否正确
  • 复制定位元素,在页面里搜索,右键检查,Elements 里面,Ctrl+F查找,没有搜索到

2)页面还没有加载完成

  • 方法:确认是加载等待问题,显示等待或者隐式等待
  • 添加time.sleep(5)调试
  • 再添加等待验证,显示等待或者隐式等待

3)存在动态ID

  • 原因:ID 是动态的,一直在变化,所以使用ID 定位非常不稳定
  • 方法:定位方式使用css 或者xpath 的相对定位
  • find_element(By.XPATH,"//*[text()='文本']")

4)页面有iframe

  • debug过程:
    • 1.浏览器的elements 页面输入iframe,确认含有iframe
    • 2.查看定位元素是否在iframe 内,如果是,需要做iframe 切换操作
  • 方法:切换到iframe 后定位
  • iframe 切换操作:
    • iframe_ele = self.driver.find_element(By.CSS_SELECTOR, ".iframe")
    • self.driver.switch_to.frame(iframe_ele)

5)页面切换window

  • 原因:打开了新窗口,需要定位的元素在新窗口里
  • 方法:切换到对应窗口后定位
  • window 切换操作:
    • wins = self.driver.window_handles
    • self.driver.switch_to.window(wins[-1])

 笔记2023-04-16

posted on 2023-04-16 23:33  三天乐趣  阅读(19)  评论(0编辑  收藏  举报