如何使用Selenium WebDriver选择新的IFrame?

时间:2014-05-06 08:47:10

标签: java iframe selenium selenium-webdriver webdriver

我想在Body中选择 Iframe 并输入值。我正在尝试使用以下代码。

HTML code:

 <iFrame id="4564654_content_ifr">
     <html>
       <head>
         <body id="tiny">
             <div aria-lable="New Compose body">
                 <br>
             </div>
         </body>
       </head>
      </html>
  </iFrame>

Selenium代码:

    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@id,'content_ifr')]")));
driver.findElement(By.xpath("//*[@id='tiny']/div[1]")).sendKeys("Happy New IFrame");

但我无法输入数值。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:3)

您可以直接设置innerHTML,而不是发送密钥。

driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@id,'content_ifr')]")));

WebElement body = driver.findElement(By.cssSelector("body"));
(JavascriptExecutor)driver.executeScript("arguments[0].innerHTML = 'Happy New IFrame'", body);

如果您正在测试某些WYSIWYG编辑器,如TinyMCE,请随时查看这篇文章:

Test WYSIWYG editors using Selenium WebDriver

然后您可以直接通过编辑器API设置内容。众所周知,Firefox中存在sendKeys的问题,但Chrome或PhantomJS应该没问题。

答案 1 :(得分:0)

请尝试以下五月帮助您。

WebElement sg= driver.findElement(By.xpath("//iframe[@id='4564654_content_ifr']"));
                driver.switchTo().frame(sg);

答案 2 :(得分:0)

List<WebElement> iframeElements= driver.findElements(By.tagName("iframe"));
System.out.println("The total number of iframes are " + iframeElements.size());
driver.switchTo().frame(0);
Thread.sleep(3000);
System.out.println("it is on frame1");