【发布时间】:2020-01-15 05:33:04
【问题描述】:
我见过可以同时使用的地方
WebDriver driver = new FirefoxDriver()
或
SearchContext driver = new FirefoxDriver()
我很困惑这两个不同的接口有什么区别?
【问题讨论】:
标签: java selenium selenium-webdriver interface webdriver
我见过可以同时使用的地方
WebDriver driver = new FirefoxDriver()
或
SearchContext driver = new FirefoxDriver()
我很困惑这两个不同的接口有什么区别?
【问题讨论】:
标签: java selenium selenium-webdriver interface webdriver
SearchContext 是一个接口,它是用于应用程序搜索的上下文信息的运行时容器。它包含与搜索相关的元信息,并且可以保存对可能对搜索和安全有用的外部上下文的引用。用于搜索时,持有对AppsWebContext的引用,可以通过getAppsContext获取。此上下文被传递给大多数应用程序插件代码,其中自定义实现可以获得运行时上下文信息。
SearchContext 接口有 2(两个)子接口:
实现类是:
SearchContext 只有两个方法:
使用SearchContext的example如下:
@Override
public List<WebElement> findElements(SearchContext searchContext) {
List<WebElement> elements = new ArrayList<>();
try {
elements.add(this.findElement(searchContext));
} catch (Exception ex) {
}
return elements;
}
【讨论】:
这是最好的博客,它清楚地回答了这个问题: 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();
【讨论】:
SearchContext 是 Webdriver 和 WebElement 接口的 superInterface。正如之前的答案所说,searchContext只有两个抽象方法。
findElement(By by)
findElements(By by)
如果我们使用searchContext创建对象,只能使用上面指定的方法。
WebDriver 有许多有用和必需的方法,例如 get、getTitle、close、quit、switchTo 等。 这些 webdriver 方法不能直接使用,除非您向下转换为 Webdriver。 因此,建议使用
WebDriver driver = new FirefoxDriver()
【讨论】:
SearchContext 是 WebDriver 和 WebElement 接口的超级接口。
因此,SearchContext 和 WebDriver 之间存在父子关系。
SearchContext 只有两个抽象方法:
【讨论】: