Как селен 2 (вебдрайвер) реализует WebElement - PullRequest
2 голосов
/ 30 апреля 2011

Сценарий, который я рассматриваю, является базовым:

page = driver.open_page(URL)
linkElement = page.find_elements(XPATH)[0]
linkElement.click()

(я предполагаю, что использую удаленный компьютер, т.е. удаленный драйвер). Как сервер знает , на каком элементе нажать.

В целом, я не смог найти обзор реализации селена 2. То есть что-то, что просто рассказывает историю , но не идет строка за строкой в ​​коде, с одной стороны, но что-то гораздо более подробное, чем просто API.

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

Вы правы, не существует единого подхода, подходящего для всех "под прикрытием" того, как WebDriver реализует различные части своего API, главным образом потому, что фактическая реализация может сильно отличаться в браузере и операционной системе. Ближайшие к вам страницы - это различные страницы в проекта wiki .

Чтобы ответить на ваш конкретный вопрос, удаленный сервер создает локальный экземпляр клиентского драйвера и использует его для поиска и щелчка элемента. Драйвер (InternetExplorerDriver, FirefoxDriver, ChromeDriver и т. Д.) Обычно использует JavaScript для поиска элемента и определения его размеров и местоположения на странице. При необходимости элемент прокручивается в поле зрения, и в окно браузера отправляется событие мыши на уровне ОС для имитации щелчка.

Тем не менее, это просто общий случай, и есть исключения. Например, некоторые браузеры могут находить элемент, используя средства, отличные от JavaScript атомов автоматизации . Аналогично, некоторые драйверы в некоторых операционных системах основаны на синтетических событиях, а не на уровне ОС, или так называемых «нативных» событиях. Важно помнить, что удаленный сервер создает тот же объект, что и вы, если бы вы вызывали драйвер локально, без использования удаленного сервера Selenium.

0 голосов
/ 02 мая 2011

Если я правильно понял ваш вопрос:

Вы запускаете удаленный сервер веб-драйверов.Через удаленного клиента драйвера (это ваш тест) этому серверу предписывается извлечь страницу («URL» - это переменная, установленная ранее, например: String URL = "http://www.asdf.com";).

Затем серверу приказано найти все элементы на выбранной странице с помощью некоторого XPath («XPATH» - это что-то вроде By.xpath("//div(@class = 'some_button_class')") - это реализация Java WebDriver, и я не уверен, как он используетсяРубин).Эта команда вернет список WebElements - все элементы div, которые выглядят так: <div class="some_button_class"><div>.Проверьте , как работает XPath , если вы не знакомы с ним.

Поскольку вы используете [0] в конце своей команды, вы говорите серверу вернутьпервый элемент из этого списка (первый div, который выглядит как <div class="some_button_class"><div>)

В конце вы говорите серверу выполнить щелчок по этому элементу.Сервер получает эту команду, переводит ее в javascript и внедряет этот javascript на страницу.Внедренный javascript вызывает событие «click» на странице и выполняет то, что произойдет, если реальный пользователь нажмет на элемент.

Надеюсь, это поможет.

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