какова цель удаленного webdriver между интерфейсом webdriver и классом chromedriver - PullRequest
1 голос
/ 02 апреля 2019

Контекст поиска - это супер интерфейс большинства в селене, который расширен еще одним интерфейсом, называемым Web Driver.

-Все абстрактные методы интерфейсов поиска и веб-драйвера реализованы в классе Remote WebDriver.

-Все классы, связанные с браузером, такие как драйвер Firefox, драйвер Chrome и т. Д., Расширяют класс Remote Webdriver.

Согласно описанному выше stmt Как класс удаленного веб-драйвера может дать определение для всех абстрактных методов, которые определены в интерфейсе контекста поиска и интерфейсе веб-драйвера. потому что детали реализации отличаются в зависимости от браузера для функции driver.get / driver.title вот так

почему классы chromedriver или firefoxdriver не могут напрямую расширять интерфейс веб-драйвера. почему класс remotedriver находится между интерфейсом веб-драйвера и классом chromedriver / firefoxdriver / iedriver

1 Ответ

1 голос
/ 03 апреля 2019

Хотя реализация может отличаться для каждого браузера на уровне драйвера (chromedriver.exe, geckodriver.exe, IEDriverServer.exe и т. Д.), Механизм, с помощью которого языковые привязки выполняют команды, одинаков для всех браузеров.Таким образом, хотя каждый класс драйвера браузера может напрямую реализовывать интерфейс, код в каждом классе драйвера будет идентичен.Использование RemoteWebDriver в качестве базового класса исключает дублирование кода.Кроме того, класс RemoteWebDriver имеет дополнительное преимущество: он полезен для выполнения команд WebDriver для браузера, работающего на другом (удаленном) компьютере, чем тот, на котором выполняется код привязки языка.

Кроме того, *Интерфейс 1010 * определяет два метода, findElement и findElements.Интерфейс WebDriver не единственный, кто его расширяет;WebElement тоже.Совершенно верно найти дочерний элемент элемента уже найденного элемента.Рассмотрим следующий пример HTML-фрагмента:

<div class="foo">
  I don’t want to select this div.
</div>
<div class="bar">
  I need to do something with this div.
  <div class="foo">
    But I also do need to select this div
  </div>
</div>

Использование driver.findElement(By.cssSelector("div.foo")) даст мне неправильный элемент, <div>, который я специально не хочу.Тем не менее, я могу сделать следующее, чтобы получить правильный элемент:

// Assume driver is a valid WebDriver instance
WebElement parent = driver.findElement(By.cssSelector("div.bar");

// Since WebElement also extends SearchContext,
// we can do this, which limits the scope of the
// find to only children of the parent element
WebElement child = parent.findElement(By.cssSelector("div.foo");

Теперь я могу манипулировать именно тем элементом, который хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...