【问题标题】:How do I find X-Path for elements within a frameset?如何找到框架集中元素的 X-Path?
【发布时间】:2012-01-20 01:43:42
【问题描述】:

我正在尝试为 Selenium 编写一个测试用例,但在查找元素时遇到了一些麻烦。我相信这是因为我的网站使用了 HTML 框架集。

如果我打开 Firebug,并尝试简单地选择所有链接:

//a

...我没有得到任何结果(尽管“菜单”框架包含大约 15 个以上的链接)。

如果我右键单击菜单框架并选择“仅显示此框架”,然后然后选择 Firebug 中的所有链接,我会返回所有 15 个以上的链接.

这让我相信 X-Path 不能遍历特定框架内的元素。这是真的吗?

当网站显示所有框架时,我可以选择特定框架:

//frame[@name='menu']

...但尝试深入到以该 X-Path 开头的链接不起作用:

//frame[@name='menu']//a
//frame[@name='menu']@@@//a <-- Special '@@@' syntax I read about somewhere to try.

感谢您尝试使用 X-Paths 解决此问题的任何帮助。如果 CSS 选择器可以工作,我也可以在那里使用一些指针。谢谢!

jg

【问题讨论】:

  • 我没有足够的 Selenium 经验来真正提供帮助,但请记住,使用框架的 HTML 页面的源代码仅链接到出现在每个窗格中的文档,因此这可能是一部分的问题。

标签: html css xpath selenium


【解决方案1】:

您先选择相关的 iframe,然后使用该框架内的 xpath。


Ruby 中的示例代码

iframename = @driver.execute_script("return document.getElementById('IDName').getElementsByTagName('iframe')[0].getAttribute('Attributename')")
@driver.switch_to.frame iframename

# then work with the xpaths
@driver.find_element(:xpath, "//section[@id='SomeId']/div").click

这应该会有所帮助,除非我的问题弄错了。

【讨论】:

  • 这点我要归功于你,因为你基本上已经想到了正确的解决方案。我必须告诉 Selenium 本身使用特定的“菜单”框架,然后它才能访问其中的元素。 Selenium 命令是:selectFrame(xpath=//frame[@name='menu'])。谢谢!
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
相关资源
最近更新 更多