3

我是 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

5 回答 5

3

ISearchContext接口不是暴露的接口,SwitchTo而是IWebDriver

具体使用的原因是什么ISearchContext?如果你改变它,IWebDriver它会工作。

这段代码,例如:

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

IWebDriver实现ISearchContext,并提供更多功能。我强烈建议您使用它而不是ISearchContext单独使用它,除非您有特殊原因这样做。

于 2012-11-30T17:19:20.327 回答
1

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

我通常使用 defaultContent:
webdriver.switchTo().defaultContent().switchTo().frame("HeaderFrame");

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

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

希望这可以帮助。

于 2012-11-30T16:32:03.183 回答
0

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

driver.switchTo().Frame("YourFrameName");
于 2014-11-28T05:51:01.877 回答
0

如果你想先切换到另一个框架中的某个框架,你应该切换到第一个框架,而不是从那里切换到另一个框架,例如:

public void switchToPopUpFrame(){
     switchToDefaultFrame();
     webdriver.switchTo().getPopUpFrame();
  }

并使用这种方法,您可以使用框架进行操作并以您需要的方式组合它们

于 2015-09-19T22:53:40.617 回答
-1

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

于 2017-04-12T17:42:44.747 回答