元素确实存在,但是程序一直提示找不到元素的时候,我们应该检查哪些东西?

小白很容易遇到的问题,元素明明肉眼可见的存在页面上,调用的查找方法也丝毫不差,为什么程序总是返回NoSuchElementException。

一、页面是否加载完成了?

如果你查找元素时没有加任何等待,那么很容易出现找不到元素,因为运行查找的时候可能页面还没有加载完成。
因此webdriver中的等待方法就很有必要了。
等待如何使用?可查看博客webdriver中的等待——主要讲解WebDriverWait()

二、driver和元素是否在同一个iframe中?

如何判断driver和元素是否在同一个iframe中呢?
最方便的方法是在Firefox中用firebug查看,详情可以看这个博客定位元素遇到的各种坑----页面嵌套了iframe
但是从2017年开始firebug跟我们说拜拜了,没有了,哭瞎(ಥ_ಥ) ~

百度了一圈也没找到便捷的方法,那么只能在开发者工具里自己仔细查看了 (ಥ_ಥ)

如何切换frame呢?
selenium提供了switch_to.frame()方法来切换frame
switch_to.frame(reference)
reference是传入的参数,用来定位frame,可以传入id、name、index以及selenium的WebElement对象

driver.switch_to.frame(0)  # 1.用frame的index来定位,第一个是0
driver.switch_to.frame("frame1")  # 2.用id来定位
driver.switch_to.frame("myframe")  # 3.用name来定位
driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # 4.用WebElement对象来定位

详情参考这篇博客:selenium之 定位以及切换frame(iframe)

ps:切换窗口
driver.switch_to.window(window_name)
# 使用场景:点击一个链接,打开一个新的窗口,需要去新窗口操作时

窗口切换可参见博客:selenium之 辨识alert、window以及操作

三、元素是否被触发为可见状态了?

哪些元素需要触发才能可见呢?

  1. 元素在列表中,需要点击才能展示
  2. 元素在提示框中,需要鼠标悬停才能看得见
鼠标右击元素
ActionChains(driver).context_click(element).perform()
鼠标悬停
ActionChains(driver).move_to_element(element).perform()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值