在 Selenium 2 - Java 中,有什么区别
ChromeDriver driver = new ChromeDriver();
和
WebDriver driver = new ChromeDriver();
?我已经在各种教程、示例等中看到过这两种方法,但不确定使用
ChromeDriver
与 WebDriver
对象之间的区别。
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。
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 {}
如果您使用
ChromeDriver driver = new ChromeDriver();
将通过该实例创建的 ChromeDriver 实例,我们将只能调用并操作由 ChromeDriver 实现且仅受 Chrome 浏览器 支持的方法。要与其他浏览器一起操作,我们必须专门创建单独的对象,如下所示:
FirefoxDriver driver = new FirefoxDriver();
InternetExplorerDriver driver = new InternetExplorerDriver();
从Selenium的角度来看,WebDriver接口类似于第3方浏览器供应商(如Mozilla,Chrome,Internet Explorer,Safari等)必须遵守并实施的协议相同的。这反过来又会帮助最终用户使用公开的 API 编写通用代码并在所有可用浏览器上实现功能,而无需进行任何更改。
通过
WebDriver driver = new ChromeDriver();
,我们正在创建 WebDriver 接口的实例,并将其 casting 到 ChromeDriver 类。所有浏览器驱动程序都喜欢:
实现了 WebDriver 接口(实际上 RemoteWebDriver 类实现了 WebDriver Interface 和 Browser 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 的实现。根据当前的实践,我们针对此界面编写自动化测试脚本,以便将来在需要时可以换入功能更齐全的浏览器。
WebDriver 是一个接口
ChromeDriver 是 WebDriver 接口的实现
https://docs.oracle.com/javase/tutorial/java/concepts/interface.html
使用上没有区别:
ChromeDriver driver = new ChromeDriver();
或
WebDriver driver = new ChromeDriver();
这可能是最简单的一点: