使用python selenium我目前正在开发一个非常复杂的测试用例。在它的中间(页面可能正在加载,在iframes中使用iframe等),我只想打开一个网页,方法如下:
driver.get("https://www.google.com")
但是我收到以下错误:
InvalidArgumentException: Message: Malformed URL: can't access dead object
我不能在我的硒测试中的某个地方打开一个网页吗?为什么这是一个格式错误的网址?死对象与导航到新网页有什么关系......?
答案 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()