Python 如何识别帧中的内容何时重新加载?

Python 如何识别帧中的内容何时重新加载?,python,selenium,selenium-chromedriver,Python,Selenium,Selenium Chromedriver,背景 Chromedriver目前有一个中断我现有测试功能的。核心缺陷使得查看正在加载的帧中的内容几乎不可能。问题开始于chromedriver 77(参见),但到80岁时,他们仍然不知道如何解决它 我的测试场景: 单击一个2帧深的按钮(外部帧,然后是内部帧),这会导致内部帧重新加载页面。根据按钮的不同,页面有时会发生变化,有时只会重新加载同一页面 受此启发,我编写了一个上下文管理器方法来等待内部页面重新加载 ###########################################

背景

Chromedriver目前有一个中断我现有测试功能的。核心缺陷使得查看正在加载的帧中的内容几乎不可能。问题开始于chromedriver 77(参见),但到80岁时,他们仍然不知道如何解决它

我的测试场景:

单击一个2帧深的按钮(外部帧,然后是内部帧),这会导致内部帧重新加载页面。根据按钮的不同,页面有时会发生变化,有时只会重新加载同一页面

受此启发,我编写了一个上下文管理器方法来等待内部页面重新加载

############################################################################
def switchToFrameContent(自身,等待:类型等待):
"""
移动到内容框(如果尚未在其上)。
"""
如果self.\u onFrame(xcn.EcBase.frame.content.frame()):
返回
self.resetFrame()
自动开关(等待)
self.\u切换到内容(等待,详细)
返回
@上下文管理器
@意外警报接收器
def waitForContentPageLoad(self,wait:typeWait):
“”:参数等待:默认值为等待“”
verbose(“等待内容页加载”)
self.switchToFrameContent()
old\u page=self.driver.find\u element\u by\u tag\u name(“html”)
产量
self.switchToFrameContent()
#wait.until(ec)的日志包装器
self.wait_直到(旧页面的陈旧),“页面变得陈旧!!!”,等等)
这将是这样使用的:

带有self.waitForContentPageLoad()的
:
#通过预期条件的包装查找元素。元素要可单击,然后调用元素。单击()
单击按钮(some_ec,msg=f“找不到{some_ec}”菜单项,wait=self.wait)
Chromedriver bug破坏了此功能,因此当我们尝试等待(旧页面)的
过时时,会抛出异常
NoSuchWindowException

他们甚至就如何应对这一问题提出了基本建议:

同时,请在点击按钮后添加一些延迟,然后再切换到iframe。或者捕获异常并重试

我尽量避免静态等待;问题在于确切知道要等多久。因此,理想情况下,我希望在没有静态等待的情况下解决这个问题我很难想出一个主意,如何识别框架中的页面何时重新加载。

编辑

我相信我误解了错误<代码>过时(旧页)
失败,因为它正在检查已破坏的上下文。换句话说:等待一秒钟以加载新帧,然后尝试检查元素是否过时

这让我想知道是否有可能确定帧何时过时。比如:

等待直到(帧的过时)
等待。直到(旧页的过时)

我不知道这是否会对java用户有所帮助——但在python selenium中,
WebDriverWait
类有一个参数用于
忽略异常。在使用
wait.until()
之前传入
NoSuchWindowException
,似乎可以绕过此错误

我仍然谨慎地建议在任何地方都使用它,但据我所知,只有在框架上下文还不存在(即bug)或试图导航到不存在的实际窗口时才会出现异常。如果我是对的,这应该意味着告诉WebDriverWait忽略
NoSuchWindowException
应该很有效


这只有在使用
预期的\u条件查找元素时才有用(我几乎完全推荐)

我不知道这是否对java用户有帮助——但在python selenium中,
WebDriverWait
类有一个参数支持
忽略的\u异常。在使用
wait.until()
之前传入
NoSuchWindowException
,似乎可以绕过此错误

我仍然谨慎地建议在任何地方都使用它,但据我所知,只有在框架上下文还不存在(即bug)或试图导航到不存在的实际窗口时才会出现异常。如果我是对的,这应该意味着告诉WebDriverWait忽略
NoSuchWindowException
应该很有效

这仅在使用
预期的\u条件
查找元素时有用-(我几乎完全推荐)