我正在使用Webdriver 2.39.0和FF 26(我也试过27)并且我有以下html:
<div id="sCaroiaj_harta">
<iframe id="ifr_layout_prepay"
scrolling="no"
frameborder="0"
src="http://test-harta.ci.rmn.ro//layout/prepay/init/1/lat/45.738235215834/lon/21.222698590278/of_lat/0/of_lon/0/adresa/073074072061064061/iZoom/15/caroiaj">
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="map_container_2">
<div id="map_container_1">
<div id="map_container" class="clearfix">
<div id="map" class="olMap cursorMap cursorMapFix"></div>
</div>
</div></div></body></html>
</iframe>
</div>
我还有以下代码,iframe中的id为“map”的元素:
Browser.waitElement(By.id("ifr_layout_prepay"));
driver.switchTo().frame("ifr_layout_prepay");
Browser.waitElement(By.id("map"));
public class Browser {
public static void waitElement(By locator) {
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
}}
测试发现iframe会切换到iframe,而不是大约需要5分钟才能找到“map”元素,并继续执行其他说明。我想指出,当试图找到“地图”时,它只挂了10秒以上,我等待的时间。
所以我不知道为什么会发生这种情况,有没有人经历过此事或有任何想法? 谢谢
答案 0 :(得分:0)
不要使用WebDriverWait,只需尝试使用自己的等待方法。
public static void waitForAnElementToAppear(By by) {
int i=0;
while(!isElementPresent(by))
{
Thread.sleep(100);
if(++i>100)
{
break;
}
}
}
您可以找到 isElementPresent 方法实施here。
现在尝试下面的流程。
driver.switchTo().frame("ifr_layout_prepay");
MyWait.waitForAnElementToAppear(By.id("map"));
click(By.id("map"));