"格式错误的网址:无法访问死对象"在selenium尝试打开谷歌时

时间:2017-12-12 10:46:36

标签: python selenium iframe

使用python selenium我目前正在开发一个非常复杂的测试用例。在它的中间(页面可能正在加载,在iframes中使用iframe等),我只想打开一个网页,方法如下:

driver.get("https://www.google.com")

但是我收到以下错误:

InvalidArgumentException: Message: Malformed URL: can't access dead object

我不能在我的硒测试中的某个地方打开一个网页吗?为什么这是一个格式错误的网址?死对象与导航到新网页有什么关系......?

2 个答案:

答案 0 :(得分:3)

我认为你在.get()之前切换到一个框架。你不能在框架中打开一个网址。试试>>> class MyClass: ... def __str__(self): ... return 'This is my class' ... >>> mc = MyClass() >>> print(mc) This is my class

答案 1 :(得分:1)

为什么我们会看到错误 can't access dead object

让我们假设我们有Web Page,其中iframe位于另一个iframe内。层次结构如下:

page root (grandparent) -> iframe (parent) -> iframe (child)

现在,在 iframe (child) 内如果我们与销毁/关闭孩子的WebElement(示例click a button)互动,我们可能会遇到错误<强> can't access dead object

原因:

似乎驱动程序正在尝试维护对单击按钮的引用。但是,按钮不再存在,因此webdriver崩溃。

可能出现的问题:

为了提高内存使用率并防止内存泄漏,Firefox不允许附加组件在其父文档被销毁后保留对DOM对象的强引用。一个死对象持有对DOM元素的强引用,即使它在DOM中被销毁后仍然存在,这是导致此错误的根本原因。

例如,GeckoDriver的当前实现并不总是检查有效的顶级浏览上下文。这意味着如果导航离开框架并尝试调用可能关闭它的 get() 方法,则以下命令可能会失败,因为上下文不再可用。

解决方案:

在这些情况下,解决方案是导航回 default_content parent_frame ,然后尝试调用 {{ 1}} 方法如下:

get()

Here are the references of this Answer