I am trying to select an Iframe
by a class name but it's not working , I am trying with tagName
it works but then when I tried to type within the element in the Iframe
I couldn't, could you please help me here is my code:
webDriver driver.switchTo().frame( driver.findElement( By.className( "cke_wysiwyg_frame cke_reset" ) ) );
driver.findElement( By.xpath( "//body[contains(text(),'type here')]" ) ).sendKeys( "Testing" );
And here is the HTML in my webpage:
<div id="cke_534_contents" class="cke_contents cke_reset" role="presentation" style="height: 75px;">
<span id="cke_586" class="cke_voice_label">Press ALT 0 for help</span>
<iframe class="cke_wysiwyg_frame cke_reset" frameborder="0" src="" style="width: 100%; height: 100%;" aria-describedby="cke_586" tabindex="0" allowtransparency="true">
<!DOCTYPE html>
<html lang="en-gb" dir="ltr">
<head>
<body class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" contenteditable="true" spellcheck="true">
type here
</body>
</html>
</iframe>
</div>
the problem was solved by finding the iFrame by xpath
driver.switchTo().defaultContent();
driver.switchTo().frame( driver.findElement( By.xpath( iframeXpath ) ) );
and then return to the top window:
driver.switchTo().defaultContent();
You cant select an iFrame using class.Check the webdriver documentation using : -
https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html
You can switch to iFrame by 'Name'/'id' attribute.
driver.switchTo().frame("frame1");
You can switch by frame index.
driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(0));
Now you have to check in the whole page how many iFrames are present ?? If its say : 3, use the 3rd iFrame always.
driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(3));
I hope it helps.
Yes, there was a mistake..Ok you can do one thing..Manually count how many iframe are there in the page, if its 3rd one whre you want to switch.
Directly specify the int value as doc says,
driver.switchTo().frame(index)
So your code can become something like this : -
driver.switchTo().frame(3);
And dont forget to get back to default Content.
driver.switchTo().defaultContent();
Please let me know if that works or not.