Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WebDriver与ChromeDriver_Java_Google Chrome_Selenium Webdriver_Webdriver_Selenium Chromedriver - Fatal编程技术网

Java WebDriver与ChromeDriver

Java WebDriver与ChromeDriver,java,google-chrome,selenium-webdriver,webdriver,selenium-chromedriver,Java,Google Chrome,Selenium Webdriver,Webdriver,Selenium Chromedriver,在Selenium 2-Java中,它们之间的区别是什么 ChromeDriver驱动程序=新的ChromeDriver() 及 WebDriver=new ChromeDriver() ??我已经在各种教程、示例等中看到了这两种方法,并且不确定使用ChromeDriver与WebDriver对象之间的区别。WebDriver是一个接口,而ChromeDriver是一个实现WebDriver接口的类。实际上ChromeDriver扩展了实现WebDriver的RemoteWebDriver。只需

在Selenium 2-Java中,它们之间的区别是什么

ChromeDriver驱动程序=新的ChromeDriver()

WebDriver=new ChromeDriver()


??我已经在各种教程、示例等中看到了这两种方法,并且不确定使用
ChromeDriver
WebDriver
对象之间的区别。

WebDriver是一个接口,而ChromeDriver是一个实现WebDriver接口的类。实际上ChromeDriver扩展了实现WebDriver的RemoteWebDriver。只需添加像ChromeDriver、FirefoxDriver、EdgeDriver这样的每个Web驱动程序,就可以实现Web驱动程序

下面是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 {}

Satish的回答是正确的,但用更通俗的话说,
ChromeDriver
是Chrome的唯一驱动程序
WebDriver
是一种更通用的驱动程序,可用于多种不同的浏览器。。。例如,铬、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 driver = new ChromeDriver();


这可能是最简单的一点:

  • ChromeDriver仅适用于Chrome浏览器
  • WebDriver适用于所有浏览器

非常有帮助,谢谢如果这回答了您的问题,请将其标记为已接受,如果您觉得它有用(或任何与此相关的答案),请向上投票。IMHO:此答案可以通过强调您可以在运行时选择浏览器这一事实来改进。将
startDriver(浏览器)
更改为
startDriver(字符串)
,并将其命名为
startDriver(System.getenv(“浏览器”)
。如果我太挑剔,请原谅。:)另外:
ChromeDriver
扩展了
JavascriptExecutor
TakesScreenshot
类(通过扩展
RemoteWebDriver
),而
WebDriver
没有扩展这些类。因此,如果您使用这些函数,并且仅使用
ChromeDriver
,则无需重新编写
驱动程序
。您的第一条评论不会改变我的答案。您也可以轻松地从配置文件中提取浏览器,将其转换为枚举,然后将其传递到
startDriver()
。我在过去几年里写的几部组曲中做了一些变化。。。但作为字符串传入同样有效。我倾向于在有意义的时候使用枚举,因为当字符串使用vs ENUM时,它减少了字符串处理和与打字错误等相关的错误。@Raedwald这怎么会是重复的?你的问题是纯粹的接口;概括性。我的问题是关于两个不同的特定对象。
WebDriver driver = new ChromeDriver();