Webdriver SwitchTo()

时间:2012-11-30 14:50:57

标签: c# webdriver pageobjects

我是webdriver的初学者,开始学习页面对象模型

以下是我使用的代码:

public static class test1
{
    public static ISearchContext Driver
    {
        get
        {
            return webDriver;
        }
    }
}

public static class test2
{
    public static test3 test3
    {
        get
        {
            var Test3 = new test3();
            PageFactory.InitElements(test1.Driver, Test3 );
            return Test3 ;
        }
    }
}

public class test3
{
    public void SwitchToFrame()
    {
        test1.Driver.SwitchTo().Frame(webDriver.FindElement(By.XPath("some xpath")));

    }
}

这一直在抛出错误。 SwitchTo永远不会作为选项提供,任何人都可以告诉我原因,请告诉我如何选择SwitchTo。 提前致谢

4 个答案:

答案 0 :(得分:3)

ISearchContext界面不是公开SwitchToIWebDriver的界面。

具体使用ISearchContext的原因是什么?如果您将其更改为IWebDriver,它将起作用。

此代码,例如:

public static IWebDriver Driver
{
    get
    {
        return webDriver;
    }
}

IWebDriver实现了ISearchContext,并提供了更多功能。我强烈建议你使用它而不仅仅是ISearchContext,除非你有特别的理由这样做。

答案 1 :(得分:1)

我相信当切换到帧时,需要使用帧ID,名称或索引来完成。因此,如果您尝试访问框架内的元素,则必须先切换到框架,然后执行webDriver.FindElement(By.XPath(“some xpath”))。此外,一旦进入框架,webdriver将保留在框架中,直到您使用webdriver.switchTo().defaultContent();(Java)切换回顶层。

我通常使用defaultContent为所有帧开关添加前缀:
 webdriver.switchTo().defaultContent().switchTo().frame("HeaderFrame");

webdriver.switchTo().defaultContent().switchTo().frame("HeaderFrame").switchTo().frame("subframe");

如果我需要进入框架内的框架。这样我总是从页面顶部开始。

希望这有帮助。

答案 2 :(得分:0)

如果您尝试切换到框架,请指定框架名称

driver.switchTo().Frame("YourFrameName");

答案 3 :(得分:-1)

你缺少IWebDriver。在代码中包含IWebDriver,它将公开SwitchTo()方法。