【问题标题】:What is the difference between SearchContext and WebDriver interfaces in Selenium or what is the relationship between them?Selenium 中的 SearchContext 和 WebDriver 接口有什么区别或它们之间的关系是什么?
【发布时间】:2020-01-15 05:33:04
【问题描述】:

我见过可以同时使用的地方

WebDriver driver = new FirefoxDriver()

SearchContext driver = new FirefoxDriver()

我很困惑这两个不同的接口有什么区别?

【问题讨论】:

    标签: java selenium selenium-webdriver interface webdriver


    【解决方案1】:

    搜索上下文

    SearchContext 是一个接口,它是用于应用程序搜索的上下文信息的运行时容器。它包含与搜索相关的元信息,并且可以保存对可能对搜索和安全有用的外部上下文的引用。用于搜索时,持有对AppsWebContext的引用,可以通过getAppsContext获取。此上下文被传递给大多数应用程序插件代码,其中自定义实现可以获得运行时上下文信息。


    接口搜索上下文

    SearchContext 接口有 2(两个)子接口:

    • WebDriver
    • Web 元素

    实现类是:

    • Chrome 驱动程序
    • EdgeDriver
    • EventFiringWebDriver
    • Firefox 驱动
    • InternetExplorerDriver
    • OperaDriver
    • RemoteWebDriver
    • RemoteWebElement
    • Safari 驱动程序

    SearchContext 只有两个方法:


    示例

    使用SearchContextexample如下:

    @Override
    public List<WebElement> findElements(SearchContext searchContext) {
        List<WebElement> elements = new ArrayList<>();
        try {
            elements.add(this.findElement(searchContext));
        } catch (Exception ex) {
    
        }
        return elements;
    }
    

    【讨论】:

      【解决方案2】:

      这是最好的博客,它清楚地回答了这个问题: http://makeseleniumeasy.com/2017/04/02/hierarchy-of-selenium-classes-and-interfaces/

      添加更多:

      SearchContext driver = new ChromeDriver();

      现在,如果您想使用 WebDriver 提供的抽象方法,例如 get(String url)、close()、quit() 等,您必须将驱动程序实例向下转换为 WebDriver 级别:

      ((WebDriver) 驱动程序).close();

      【讨论】:

        【解决方案3】:

        SearchContext 是 Webdriver 和 WebElement 接口的 superInterface。正如之前的答案所说,searchContext只有两个抽象方法。

        findElement(By by)
        findElements(By by)
        

        如果我们使用searchContext创建对象,只能使用上面指定的方法。

        WebDriver 有许多有用和必需的方法,例如 get、getTitle、close、quit、switchTo 等。 这些 webdriver 方法不能直接使用,除非您向下转换为 Webdriver。 因此,建议使用

        WebDriver driver = new FirefoxDriver()
        

        【讨论】:

          【解决方案4】:

          SearchContext 是 WebDriver 和 WebElement 接口的超级接口。
          因此,SearchContext 和 WebDriver 之间存在父子关系。
          SearchContext 只有两个抽象方法:

          1. WebElement findElement(By by)
          2. java.util.List findElements(By by) : 返回 WebElements 列表
            另一方面,WebDriver 接口也有很多抽象方法。
            SerachContext和Webdriver接口的所有抽象方法都在RemoteWebDriver类中实现。
            这些链接将帮助您了解: https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/SearchContext.html https://www.javadoc.io/doc/org.seleniumhq.selenium/selenium-api/2.50.1/org/openqa/selenium/WebDriver.html

          【讨论】:

            猜你喜欢
            • 2015-06-19
            • 2014-03-20
            • 1970-01-01
            • 2016-01-09
            • 1970-01-01
            • 2013-04-17
            • 2018-06-13
            • 2019-03-17
            • 1970-01-01
            相关资源
            最近更新 更多