В этом посте мы узнаем, почему в сценариях Selenium мы пишем WebDriver driver = new FirefoxDriver(). Многие студенты задавали этот вопрос, и я хотел бы поделиться здесь некоторыми моментами.
В этом посте мы обсудим следующие моменты.
Java Учебное пособие для тестировщиков Selenium
Прежде чем углубляться в подробности, давайте посмотрим на изображение ниже.
Ниже приведены несколько моментов, основанных на приведенном выше изображении.
- SearchContext — это самый мощный интерфейс в Selenium, который расширяется за счет другого интерфейса, называемого WebDriver.
- Все абстрактные методы Интерфейсы SearchContext и WebDriver реализованы в классе RemoteWebDriver.
- Все классы, связанные с браузером, такие как FirefoxDriver, ChromeDriver и т. д., расширяют класс RemoteWebdriver.
Необходимо изучить: архитектура Selenium WebDriver
WebDriver определяет общие методы, которые используют все классы браузеров (например, Firefox, Chrome и т. д.). Все эти методы класса являются производными от интерфейса WebDriver.
Все абстрактные методы обоих интерфейсов реализованы в классе RemoteWebDriver, который расширяется за счет классов браузера, таких как драйвер Firefox, драйвер Chrome и т. д.
Почему бы не использовать драйвер WebDriver = new WebDriver()
Давайте посмотрим, почему мы не можем использовать следующий оператор.
Driver driver = new WebDriver();
Мы не можем написать наш код таким образом, потому что мы не можем создать объект интерфейса. WebDriver — это интерфейс.
Но в нашем скрипте мы можем использовать любой из следующих операторов:
FirefoxDriver driver = new FirefoxDriver();
или
< em>Драйвер WebDriver = новый FirefoxDriver();
Давайте рассмотрим их оба подробно.
Почему мы не предпочтем драйвер FirefoxDriver = новый FirefoxDriver()
Драйвер FirefoxDriver = новый FirefoxDriver();
Экземпляр FirefoxDriver, созданный на основе приведенного выше оператора, сможет вызывать и действовать только с методами, реализованными FirefoxDriver и поддерживаемыми только браузером Firefox. Мы знаем, что FirefoxDriver — это класс, реализующий все методы интерфейса WebDriver. Используя этот оператор, мы можем запускать наши сценарии только в браузере Firefox.
Чтобы работать с другими браузерами, нам необходимо специально создавать отдельные объекты, как показано ниже:
Драйвер ChromeDriver = new ChromeDriver();
Драйвер InternetExplorerDriver = новый InternetExplorerDriver();
Мы не просто запускаем наши скрипты только в одном браузере. Мы используем несколько браузеров для обеспечения кросс-браузерной совместимости. Нам нужна гибкость, чтобы использовать другие браузеры, такие как ChromeDriver() для запуска в браузере Chrome и InternetExplorerDriver() для запуска в браузере IE и т. д.
Итак, как только вы запустите браузер Firefox с помощью драйвера FirefoxDriver = новый FirefoxDriver (); один и тот же объект нельзя использовать для запуска браузера Chrome (вам придется переименовать его)
Почему драйвер WebDriver = new FirefoxDriver()< /h2>
Драйвер ChromeDriver = новый ChromeDriver();
Чтобы решить эту проблему, мы используем «Драйвер Webdriver = новый FirefoxDriver();»
Давайте посмотрим это сейчас.
Драйвер WebDriver = новый FirefoxDriver();
Мы можем создать объект класса FirefoxDriver, взяв ссылку на интерфейс (WebDriver). В этом случае мы можем вызвать реализованные методы интерфейса WebDriver.
В соответствии с приведенным выше утверждением мы создаем экземпляр интерфейса WebDriver и приводим его к классу FirefoxDriver. Все остальные драйверы браузера, такие как ChromeDriver, InternetExplorerDriver, PhantomJSDriver, SafariDriver и т. д., реализовали интерфейс WebDriver (фактически класс RemoteWebDriver реализует интерфейс WebDriver, а драйверы браузера расширяют RemoteWebDriver). На основании этого утверждения вы можете назначить драйвер Firefox и запустить сценарий в браузере Firefox (любой браузер зависит от вашего выбора).
Мы увидим RemoteWebDriver в следующем разделе ниже.
Если вы определите драйвер как WebDriver, переключение будет очень простым. Если мы используем этот оператор в нашем скрипте, драйвер WebDriver сможет реализовать любой браузер. Каждый класс драйвера браузера реализует интерфейс WebDriver, и мы можем получить все методы. Это поможет вам при тестировании в нескольких браузерах.
Пример:
WebDriver driver = new FirefoxDriver();
driver.quit();
driver = new ChromeDriver();
WebDriver — это интерфейс, и все методы, объявленные в интерфейсе Webdriver, реализуются соответствующим классом драйвера. Но если мы выполним повышающее преобразование, мы сможем запускать сценарии в любом браузере, т. е. запускать одни и те же сценарии автоматизации в разных браузерах для достижения полиморфизма времени выполнения.
WebDriver driver = new FirefoxDriver();
Здесь WebDriver – интерфейс, driver – ссылочная переменная, FirefoxDriver() — это конструктор, new — ключевое слово, а new FirefoxDriver() — это объект.
Общая информация: Selenium WebDriver — это интерфейс, который содержит различные методы (например, get(), getTitle(), close() и т. д. ). Все сторонние поставщики браузеров реализуют эти методы в дополнение к методам, специфичным для их браузеров. Это, в свою очередь, поможет конечным пользователям использовать открытые API для написания общего кода и реализации функций во всех доступных браузерах без каких-либо изменений. Разработчики Selenium не знают, как работают все эти браузеры. Таким образом, разработчики Selenium просто объявляют методы, какие им нужны, и оставляют часть реализации разработчикам браузера.
Разница между WebDriver и RemoteWebDriver
Согласно концепции интерфейса Java, интерфейс содержит только подпись метода и не содержит определений метода.
Проверьте этот пост, чтобы узнать разницу между объявлением метода и определением метода.
WebDriver — это интерфейс, который содержит весь Selenium. Сигнатуры методов (например, findElement(),switchTo(),get() и т. д.), где определение этих методов находится в классе RemoteWedDriver.
Если мы хотим запускать наши сценарии автоматизации в браузере локального компьютера, мы можем использовать любой класс (например, Firefoxdriver, iedriver, chromedriver, htmlunitdriver), кроме RemoteWebDriver. WebDriver запустит веб-браузер на компьютере, где его создает код.
Если мы хотим запускать наши сценарии автоматизации в браузере удаленного компьютера, мы используем RemoteWebDriver. RemoteWebDriver требует, чтобы автономный сервер Selenium был запущен, но для использования других драйверов автономный сервер Selenium не требуется.
Если вы хотите работать с Grid, вам придется использовать RemoteWebDriver. Единственное требование заключается в том, что для работы RemoteWebDriver он всегда должен указывать на URL-адрес Grid.
Если вы используете любой из драйверов, кроме RemoteWebDriver, тогда связь будет происходить браузер локального компьютера.
Пример: Webdriver driver = new FirefoxDriver();
драйвер будет напрямую обращаться к Firefox на локальном компьютере.
Что такое RemoteWebDriver и где мы его используем
Если мы используем RemoteWebDriver, нам необходимо указать, где находится сервер Selenium и какой веб-браузер вы хотите использовать.
Пример: WebDriver driver = new RemoteWebDriver(new URL Desired options.firefox());
Мы можем использовать RemoteWebDriver так же, как если бы мы использовали WebDriver локально. Основное отличие состоит в том, что удаленный веб-драйвер необходимо настроить так, чтобы он мог запускать тесты на удаленном компьютере.
WebDriver — это интерфейс, который вы должны использовать во время своих тестов. RemoteWebDriver — это конкретная реализация этого интерфейса. В общем, всегда полезно писать код с учетом интерфейсов везде, где это возможно.
Надеюсь, вам все понятно. Если вам понравился этот пост, не забудьте поделиться им.
Вам также может понравиться это:
- Dynamic XPath — полное руководство
- JavaScriptExecutor — полное руководство
- Как воспользуйтесь преимуществами BrowserStack в Selenium
- Изучите тестирование API за 10 минут
Популярные вопросы на собеседовании
- Вопросы на собеседовании по Selenium
- Вопросы на собеседовании по Java
- Вопросы на собеседовании по тестированию программного обеспечения
- Вопросы на собеседовании по гибкому тестированию
- Вопросы на собеседовании по SQL
TAG: qa