【发布时间】:2019-07-18 22:40:52
【问题描述】:
我是 Selenium 的新手。 我一直在寻找所有可能的方法来解决这个问题(此时我认为它只是无法解决)我有一个包含此输入的网页(无法共享):
/html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/div/iframe/#document/html/body/div[2]/div/iframe/#document/html/frameset/frame/#document/html/frameset/frameset/frameset/frame/#document/html/body/div/form/table/tbody/tr[2]/td[2]/input
(如您所见,该结构混合了框架、iframe 和框架集;其中一些有 id,而另一些没有名称)
问题是 Selenium 不会通过我的任何方法找到元素 已经测试过
。首先我尝试了一个简单的 driver.findElement(By.all of them)
在他们不起作用后,我开始在网上寻找,但我找不到为什么我无法处理这个问题。
它是网页中唯一的输入,并且有一个id作为属性,所以应该很容易。
This is the class where I have been trying to make it work, 如果你想检查我不成功的工作,我将最后的努力集中在第 8 次尝试上。
正如你所看到的,我一直在尝试通过多种方式获得它,框架似乎确实是一个问题,但不是它们,也不是等待。
真的没有办法得到这个元素吗?是不是其中一种情况 Selenium 无法自动化的地方?或者是我错过了什么。
对象是可见的,甚至没有滚动条,整个页面完全适合屏幕,Xpath 是我测试的首选之一,没有工作
提前谢谢你。
【问题讨论】:
-
分享您的 HTML。
-
iframes 可能会把事情搞砸,因为它们是嵌入在网页中的网页。不幸的是,您有多个。在通过 id 选择元素之前,请查看this article 以了解如何切换到正确的 iframe。 -
对不起 Ramtir 我知道你无法如你所愿地帮助我,但我不能分享 HTML :S。关于 iframe 主题,这篇文章提出的是我在发布的代码示例中的一种方法。也没有用。 @AutomatedChaos
-
这个answer 描述了切换到第一帧(iframe),然后是其中的子帧(iframe)。这个answer 解释说你可以忽略框架集,只使用其中的框架。因此,尝试完成您的代码示例并假设框架是嵌套的,而不是您尝试过的兄弟姐妹:
util.driver.switchTo().frame("contentAreaFrame") util.driver.switchTo().frame("isolatedWorkArea") util.driver.switchTo().frame("0") util.driver.switchTo().frame("0") util.driver.findElement(By.xpath(//input)) -
我认为这就是我在网上做的事情:264,但完全按照你的建议尝试给了我这个错误:org.openqa.selenium.NoSuchFrameException: No frame element found by name or id 隔离工作区。虽然我开始调试并且经过大量尝试后我发现 SELENIUM 正在切换到另一个名称的另一个框架!即使我正在寻找确切的名称,Selenium 也搞砸了,所以我使用 By.xpath 切换到框架,它终于奏效了,谢谢大家。
标签: java selenium automation