C#中的Selenium - 如何导航不同的帧

时间:2016-02-03 06:59:16

标签: c# selenium-webdriver

该网站包含以下内容:

html

它有3个不同的帧,我如何导航到所需的帧? 在我的下面的代码中,使用试验和错误,我发现frameIndex = 1允许我找到这些元素(欢迎,配置,工具等)。

但这个索引号一直保持不变吗?有没有更可靠的方法让我知道哪个帧是哪个?

[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();
    }       
}

2 个答案:

答案 0 :(得分:2)

您可以使用以下方法实际选择iFrame: -

  • frame(index)
  • frame(帧的名称[或]帧的ID)

  • frame(WebElement frameElement)

  • defaultContent()

因此,您可以通过传递有关帧的任何上述信息进行切换。 是的,您需要根据需要的操作每次切换

我们可以看到您的框架有不同的名称,如: - topnavigation等。使用框架名称在它们之间切换

实施例: -

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

....在框架上执行您的操作

driver.SwitchTo().defaultContent();

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

....在框架上执行您的操作

driver.SwitchTo().defaultContent();

希望它能帮到你:)

答案 1 :(得分:0)

我过去使用过这样做:

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

基本上你使用Frame()方法在帧之间切换..

在这个问题中,您可以阅读如何识别框架:

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