Хотя реализация может отличаться для каждого браузера на уровне драйвера (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");
Теперь я могу манипулировать именно тем элементом, который хочу.