Liren Yeo
Liren Yeo

Reputation: 3451

Selenium in C# - How do I navigate different frames

The website has the following elements:

html

It has 3 different frames, how do I navigate myself to the desired frame? In my following code, using trial and errors I found that frameIndex = 1 allows me to find those elements (welcome, config, instruments, etc).

But does this index number stay the same all the time? Is there a more reliable way for me to know which frame is which?

[TestClass]
public class Test2
{
    IWebDriver driver;
    string url = "http://10.116.33.6/";

    [TestInitialize]
    public void TestSetup()
    {
        var IEOption = new InternetExplorerOptions();
        var IEService = InternetExplorerDriverService.CreateDefaultService();
        IEOption.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
        IEOption.IgnoreZoomLevel = true;
        IEService.HideCommandPromptWindow = true;

        driver = new InternetExplorerDriver(IEService, IEOption);
        driver.Navigate().GoToUrl(url);

    }

    [TestMethod]
    public void NavigateMenu()
    {
        driver.SwitchTo().Frame(1);

        var welc = driver.FindElement(By.Name("welcome"));
        var conf = driver.FindElement(By.Name("config"))     ;
        var inst = driver.FindElement(By.Name("instruments"));
        var stat = driver.FindElement(By.Name("status"))     ;
        var help = driver.FindElement(By.Name("help"))       ;

        conf.Click();
    }       
}

Upvotes: 0

Views: 2220

Answers (2)

Shubham Jain
Shubham Jain

Reputation: 17553

You can actually select an iFrame using the below methods: -

  • frame(index)
  • frame(Name of Frame [or] Id of the frame)

  • frame(WebElement frameElement)

  • defaultContent()

So you can switch by passing the any above information about the frame. Yes you need to switch everytime according to require action

As we can see your frame have different name like :- top, navigation etc. Use name of the frame to switch between them

Example:-

driver.SwitchTo().Frame("top");

.... Perform your action on frame

driver.SwitchTo().defaultContent();

driver.SwitchTo().Frame("navigation");

.... Perform your action on frame

driver.SwitchTo().defaultContent();

Hope it will help you :)

Upvotes: 2

Jannik
Jannik

Reputation: 2429

I have done this in the past using:

m_internetExplorerDriver.SwitchTo().DefaultContent();
//put your name or id instead, e.g. "navigation" instead of "menuframe"
m_internetExplorerDriver.SwitchTo().Frame("menuframe"); 

Basically you use the Frame() method to switch between frames..

In this question you can read how to identify the frame:

How to identify and switch to the frame in selenium webdriver when frame does not have id

Upvotes: 0

Related Questions