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