【发布时间】:2014-06-20 14:33:51
【问题描述】:
我已经搜索了很多论坛主题来解决我的问题,但我没有发现任何类似的问题。 我正在使用 Java 编写 Selenium WebDriver 测试。
我正在测试的网站使用 iframe,其中将加载用户的所有可见内容。它看起来像这样:
<html>
<head>
(...)
</head>
<body>
<iframe id="portalIframe">
<html>
<body>
<h2 id="aui_3_2_0_1594">Etat des agents</h2>
...
</body>
</html>
</iframe>
</body>
</html>
我的问题如下:在 iframe 中查找元素并不总是有效。当我想定位这样一个元素时,我首先运行一个方法来切换到 iframe:
protected void switchIframe() {
WebDriverWait wait = new WebDriverWait(driver, 10);
By by = By.id("portalIframe");
try {
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(by));
} catch (TimeoutException e) {
e.printStackTrace();
}
}
然后我可以例如找到一个 h2 元素:
driver.findElement(By.xpath("//h2[contains(text(),'Some text')]"));
我无法理解的是,有时 selenium 无法在网页上找到元素。例如,我刚刚设法找到 h2 元素,然后单击菜单链接以加载另一个页面,但是当我尝试在新页面上再次找到 元素时,出现“找不到元素错误”,如果我尝试在此之前添加 switchIframe(),selenium 说它找不到 iframe。
这似乎是“随机”发生的,所以我真的不知道该怎么做才能解决这个问题。 ChromeDriver 和 FirefoxDriver 上的问题是相同的。我不使用其他驱动程序,因为这个私人网站只会使用 Firefox 和 Chrome。
编辑 很抱歉我不能粘贴html内容,因为它是一个内网网站,我不能在这里分享。 我尝试定位的 h2 元素示例 代理机构
我的问题也与这个问题非常相似: Selenium WebDriver not able to find elements which are not present in the Page Source but present in HTML when seen through Developer Tools 该问题不仅出现在 h2 元素上,而且还出现在我想要单击的“a”元素上。
谢谢
【问题讨论】:
-
您可以分享您尝试与之交互的 iframe 中的相关代码吗?
-
这样的 h2 元素:Etat des agent 此外,id 属性可能不能用作可靠的定位器,因为它在每次页面重新加载时都会更改.
-
我根据您的反馈编辑了您的问题。它是否正确?你想选择这个h2吗?
-
是的,谢谢,虽然我试图找到的 h2 元素包含在几个 div 块的层次结构中,但这没关系
标签: java iframe selenium webdriver selenium-chromedriver