即使切换到iframe,Selenium WebDriver也无法在iframe中找到元素

时间:2014-06-20 14:33:51

标签: java iframe selenium webdriver selenium-chromedriver

我搜索了很多论坛topîcs来解决我的问题,但我没有发现任何类似的问题。 我正在使用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元素,然后我点击一个菜单链接来加载另一个页面但是当我再次尝试找到一个&lt; h2&gt;在新页面上的元素,我得到一个“未找到元素错误”,如果我尝试在此之前添加switchIframe(),selenium说它找不到iframe。

它似乎是“随机”发生的,所以我真的不知道如何解决这个问题。 ChromeDriver和FirefoxDriver上的问题相同。我不使用其他驱动程序,因为只有Firefox和Chrome将用于此私人网站。

修改 对不起,我无法粘贴html内容,因为它是一个内联网网站,我不能在这里分享。 我试图找到的h2元素的一个例子     &LT; h2 id =“aui_3_2_0_1594”&gt; Etat des agents&lt; / h2&gt;

此外,我的问题与此问题非常相似: 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”元素上。

由于

1 个答案:

答案 0 :(得分:1)

在寻找HTML元素时似乎没有等待足够的时间。我只是增加了我的显式wait方法的超时。我不是在谈论switchIframe(),而是指的是另一种用于等待元素存在的方法:

所以,我已经将超时时间从3秒增加到6秒,现在看起来效果很好。

protected WebElement waitForElementVisible(By by) {
    WebDriverWait wait = new WebDriverWait(driver,6);
    WebElement element = null;

    try {
        element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));
    } catch (TimeoutException e) {
        //method logging an error
        error("Timeout : element " + by.toString() + " is not visible");
    }
    return element;
}