10

I am writing tests for a legacy application in which there is an iFrame within the main document, and then another iFrame within that. So the hierarchy is:

Html Div (id = tileSpace)
  iFrame (id = ContentContainer)
    iFrame (id = Content)
      Elements

This is my code (I am using C#)

RemoteWebDriver driver = new InternetExplorerDriver();
var tileSpace = driver.FindElement(By.Id("tileSpace"));
var firstIFrame = tileSpace.FindElement(By.Id("ContentContainer"));
var contentIFrame = firstIFrame.FindElement(By.Id("Content"));

The problem is, I am unable to reach the 2nd level iFrame i.e. contentIFrame

Any ideas?

2 Answers 2

24

I'm currently testing on a similar website. (nested iframes inside the main document)

<div>
    <iframe>
        <iframe><iframe/>
    <iframe/>
</div>

It seems that you are not using the frame switching method provided in Api. This could be the problem.

Here is what I'm doing, it works fine for me.

//make sure it is in the main document right now
driver.SwitchTo().DefaultContent();

//find the outer frame, and use switch to frame method
IWebElement containerFrame = driver.FindElement(By.Id("ContentContainer"));
driver.SwitchTo().Frame(containerFrame);

//you are now in iframe "ContentContainer", then find the nested iframe inside
IWebElement contentFrame = driver.FindElement(By.Id("Content"));
driver.SwitchTo().Frame(contentFrame);

//you are now in iframe "Content", then find the elements you want in the nested frame now
IWebElement foo = driver.FindElement(By.Id("foo"));
Sign up to request clarification or add additional context in comments.

Comments

0

Try below code:

    //Switch to required frame
    driver.SwitchTo().Frame("ContentContainer").SwitchTo().Frame("Content");

    //find and do the action on required elements

    //Then come out of the iFrame
    driver.SwitchTo().DefaultContent();

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.