WebDriver 和 ChromeDriver 有什么区别?

问题描述 投票:0回答:5

在 Selenium 2 - Java 中,有什么区别

ChromeDriver driver = new ChromeDriver();

WebDriver driver = new ChromeDriver();

?我已经在各种教程、示例等中看到过这两种方法,但不确定使用

ChromeDriver
WebDriver
对象之间的区别。

java google-chrome selenium-webdriver selenium-chromedriver
5个回答
22
投票

Satish 的答案是正确的,但用更通俗的话说,

ChromeDriver
是专门且唯一的 Chrome 驱动程序。
WebDriver
是一个更通用的驱动程序,可用于许多不同的浏览器...IE、Chrome、FF等。

如果您只关心 Chrome,您可以使用

创建驱动程序
ChromeDriver driver = new ChromeDriver();

如果您想创建一个返回指定浏览器驱动程序的函数,您可以执行如下操作。

public static WebDriver startDriver(Browsers browserType)
{
    switch (browserType)
    {
        case FIREFOX:
            ...
            return new FirefoxDriver();
        case CHROME:
            ...
            return new ChromeDriver();
        case IE32:
            ...
            return new InternetExplorerDriver();
        case IE64:
            ...
            return new InternetExplorerDriver();
        default:
            throw new InvalidParameterException("Unknown browser type");
    }
}
public enum Browsers
{
    CHROME, FIREFOX, IE32, IE64;
}

...然后称其为...

WebDriver driver = startDriver(Browsers.FIREFOX);
driver.get("http://www.google.com");

并且根据您指定的浏览器,该浏览器将启动并导航到 google.com。


20
投票

WebDriver是一个接口,而ChromeDriver是一个实现WebDriver接口的类。实际上ChromeDriver扩展了RemoteWebDriver,它实现了WebDriver。只需添加每个 WebDriver,如 ChromeDriver、FirefoxDriver、EdgeDriver 都应该实现 WebDriver。

以下是 ChromeDriver 和 RemoteDriver 类的签名

public class ChromeDriver extends RemoteWebDriver
implements LocationContext, WebStorage {}

public class RemoteWebDriver implements WebDriver, JavascriptExecutor,
FindsById, FindsByClassName, FindsByLinkText, FindsByName,
FindsByCssSelector, FindsByTagName, FindsByXPath,
HasInputDevices, HasCapabilities, TakesScreenshot {}

12
投票

ChromeDriver 驱动程序 = new ChromeDriver();

如果您使用

ChromeDriver driver = new ChromeDriver();
将通过该实例创建的 ChromeDriver 实例,我们将只能调用并操作由 ChromeDriver 实现且仅受 Chrome 浏览器 支持的方法。要与其他浏览器一起操作,我们必须专门创建单独的对象,如下所示:

  • FirefoxDriver driver =  new FirefoxDriver();
  • InternetExplorerDriver driver = new InternetExplorerDriver();

WebDriver 接口

Selenium的角度来看,WebDriver接口类似于第3方浏览器供应商(如MozillaChromeInternet ExplorerSafari等)必须遵守并实施的协议相同的。这反过来又会帮助最终用户使用公开的 API 编写通用代码并在所有可用浏览器上实现功能,而无需进行任何更改。


WebDriver 驱动程序 = new ChromeDriver();

通过

WebDriver driver = new ChromeDriver();
,我们正在创建 WebDriver 接口的实例,并将其 castingChromeDriver 类。所有浏览器驱动程序都喜欢:

实现了 WebDriver 接口(实际上 RemoteWebDriver 类实现了 WebDriver InterfaceBrowser Drivers 扩展了 RemoteWebDriver)。因此,如果我们使用

WebDriver driver
,那么我们可以将已经初始化的 driver (作为公共对象变量)用于我们想要自动化的所有浏览器,例如Mozilla、Chrome、InternetExplorer、Edge、Opera、Safari 如下:

WebDriver driver = new FirefoxDriver();
// or
WebDriver driver = new ChromeDriver();
// or
WebDriver driver = new InternetExplorerDriver();
// or
WebDriver driver = new EdgeDriver();
// or
WebDriver driver = new OperaDriver();
// or
WebDriver driver = new SafariDriver();

琐事

根据当前场景,我们必须直接实例化 WebDriver Interface 的实现。根据当前的实践,我们针对此界面编写自动化测试脚本,以便将来在需要时可以换入功能更齐全的浏览器


1
投票

WebDriver 是一个接口

ChromeDriver 是 WebDriver 接口的实现

https://docs.oracle.com/javase/tutorial/java/concepts/interface.html

使用上没有区别:

ChromeDriver driver = new ChromeDriver();

WebDriver driver = new ChromeDriver();

0
投票

这可能是最简单的一点:

  • ChromeDriver 仅特定于 Chrome 浏览器
  • WebDriver 对于所有浏览器都是全局的
© www.soinside.com 2019 - 2024. All rights reserved.