相关问题:
- 定位方法有几种,分别是?
- 什么原因导致的定位不到元素?
- 隐藏元素如何定位?
- 如何定位动态元素?
- 通过子元素定位父元素?
- 如何判断一个页面上元素是否存在?
- 有的元素就加载也页面上,但是你却定位不到?
- 一个元素明明定位到了,也点击无效没有报错
问题分类:
- 元素定位
- 元素定位不到
- 元素操作
- 元素是否在页面存在
元素是否在页面存在?
- 方法:通过查看当前页面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