Selenium Webdriver无法在iframe中找到元素

时间:2015-09-29 13:39:40

标签: java selenium testing iframe selenium-webdriver

当代码中存在Iframe时,我在使用selenium webdriver运行测试时遇到了一些问题。

网页中有一个iframe,我正在工作:

<div class="bwc layout">
    <div class="bwc-frame">
        <iframe id="bwc-frame" class="bwc-frame" src="index.php?module=Campaigns&action=EditView&return_module=Campaigns&return_action=index&bwcFrame=1">
            (...)
        </iframe>
    </div>
</div>

但是,当我尝试在该帧中找到一个元素时,我收到此错误消息:

  

线程“main”中的异常org.openqa.selenium.NoSuchElementException:无法找到元素:{“method”:“id”,“selector”:“name”}

如果我使用Selenium IDE,我没有找到该元素的问题。它只发生在webdriver上。

这是我的(selenium)代码:

WebDriver drive = new FirefoxDriver();
driver.get(myUrl);
WebDriverWait wait = new WebDriverWait(driver, 20);

//Login in my site
wait.until(ExpectedConditions.presenceOfElementLocated(By.name("username")));
driver.findElement(By.name("username")).sendKeys("username");
driver.findElement(By.name("password")).sendKeys("password");
driver.findElement(By.name("login_button")).click();
//end of Login (everything is ok with this part, no Iframes inside)

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); //For Web Loading
driver.switchTo().frame(0); //There is a single Iframe 
driver.findElement(By.id("name")); //Webdriver can't find this element

我试图以多种不同的方式切换到框架:

driver.switchTo().frame(driver.findElement(By.cssSelector("iframe.bwc-frame")));

driver.switchTo().frame("bwc-frame");

但是我得到了相同的结果。

我也尝试过显式等待而不是隐式等待:

wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("iframe.bwc-frame")));

当我尝试在Iframe中找到元素时,我得到相同的结果,NoSuchElementException。

拜托,任何人都知道为什么会失败?感谢。

修改

我检查了代码上有一个iframe,我通过FireFinder Firefox插件确认了这一点,通过搜索“iframe”。你可以在这里查看结果:

firefinder search

如果我去index.php(我的框架的页面)并再次搜索“iframe”,结果是“匹配元素:0”

我也直接去了index.php的代码,检查代码上是否有“id = name”,是的。

所以,我想我可以说代码上有一个iframe(没有嵌套的iframe),里面有一个id = name。

编辑2:

另外,我将Iframe作为新的HTML保存到本地路径中,用selenium打开它,只是尝试不同的东西。如果我使用定位器“id = name”仅测试此HTML,则selenium可以完美地找到该元素。

您认为问题可能出在iframe内的3个标签中吗?我应该选择一些标签吗?

0 个答案:

没有答案