Selenium WebDriver花费大量时间在iframe中查找元素

时间:2014-02-18 15:32:12

标签: java iframe selenium

我正在使用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秒以上,我等待的时间。

所以我不知道为什么会发生这种情况,有没有人经历过此事或有任何想法? 谢谢

1 个答案:

答案 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"));