При инициализации ChromeDriver и назначении его переменной, тип которой ChromeDriver, вы можете использовать все конкретные методы, доступные для этого типа. Это полезно, если вам нужно настроить окно браузера Chrome:
ChromeDriver driver = new ChromeDriver();
// Configure Google Chrome
WebDriver - это интерфейс. ChromeDriver - это конкретный класс, который реализует интерфейс WebDriver. При инициализации переменной WebDriver для нового экземпляра ChromeDriver вы просто предоставляете конкретную реализацию абстракции WebDriver. Это делается, когда вы хотите провести тестирование в Chrome, но вам не нужны Chrome определенные c конфигурации, и для ваших тестов достаточно методов, предоставляемых интерфейсом WebDriver.
WebDriver driver = new ChromeDriver();
// Use the WebDriver abstraction without needing to know it is Chrome
Класс RemoteWebDriver - это абстрактный класс, из которого происходит ChromeDriver. Он имеет конкретную реализацию, связанную с выполнением вызовов веб-службы к процессу «веб-драйвера», запущенному на том же компьютере. Он также содержит абстракции, которые должны реализовывать конкретные классы, такие как ChromeDriver.
Причина, по которой вы не часто видите, что новый ChromeDriver назначается переменной RemoteWebDriver, заключается в том, что с точки зрения теста, нет функциональной разницы между Объект WebDriver и объект RemoteWebDriver. Уровень абстракции, предоставляемый RemoteWebDriver, просто не очень полезен.
RemoteWebDriver driver = new ChromeDriver();
// test code tends to only call methods defined in the WebDriver interface,
// so why bother with a concrete class?