如何使用 Xpath 选择 iframe 中的元素?

How do I select elements inside an iframe with Xpath?

提问人:Uri 提问时间:3/3/2015 更新时间:9/21/2022 访问量:57074

问:

我想创建一个 Selenium 测试来测试我们的 AOL 邮件扩展。我设法登录了AOL并撰写了一封电子邮件,但我还需要在编辑器中选择元素,该编辑器位于iframe中。我检查了一下,即使编辑器打开,以下测试也失败了:

self.assertEqual(first=1, second=len(self.driver.find_elements_by_xpath(xpath="//iframe[@name='editor_body']//body[@contenteditable='true']")))

我收到错误。如何通过 Xpath(或以任何其他方式使用 Selenium)选择 iframe 和其他元素的主体?AssertionError: 1 != 0

python iframe xpath

评论

1赞 Mark Rowlands 3/3/2015
您是否尝试过使用 ?.switch_to().frame(element)
0赞 Uri 3/3/2015
@MarkRowlands 谢谢,它有效!但是随着self.driver.switch_to.frame(frame_reference=self.driver.find_element_by_xpath(xpath="//iframe[@name='editor_body']"))

答:

36赞 ddavison 3/3/2015 #1

在切换到它们之前,您不能遍历 。你的 xPath,<iframe>

//iframe[@name='editor_body']//body[@contenteditable='true']

将不起作用,因为标记位于 iFrame 中,而 iFrame 不在当前上下文中。您需要先切换到它:<body>

driver.switch_to.frame('editor_body')...

评论

5赞 Uri 3/3/2015
谢谢,它有效!我用self.driver.switch_to.frame(frame_reference=self.driver.find_element_by_xpath(x‌​path="//iframe[@name='editor_body']"))
0赞 Jeremy Moritz 2/23/2016
我将如何使用 Selenium 节点做到这一点?
0赞 ddavison 2/23/2016
无论您是在本地运行,还是使用节点,结果都是一样的。
1赞 mMontu 10/3/2017
实际上,可以通过将 xpath 的范围设置为 iframe 的 contentDocument 属性来避免调用,如本答案中所述switch_to_frame
1赞 Guilherme Borges Bastos 9/21/2022 #2

如果您在 Selenium 自动化测试期间遇到问题,这里有一些可以解决我问题的信息:

默认情况下,Selenium 可以访问父浏览器驱动程序。为了访问框架内部,驱动程序的焦点必须从主浏览器窗口转移到 iframe(frame)。

因此,如果您碰巧必须在 iframe 中执行断言,然后返回主窗口进行其他交互,则需要根据目标更改驱动程序的焦点。

更多信息请访问:https://www.tutorialspoint.com/how-do-i-select-elements-inside-an-iframe-with-xpath