Контекст предоставляется на тот случай, если кто-то знает альтернативный способ решения более крупной проблемы.
Контекст проблемы
Я возглавляю разработку среды автоматизации тестирования для веб-приложения, использующего веб-компоненты. Это создало проблему при тестировании в Internet Explorer, поскольку Internet Explorer изначально не поддерживает веб-компоненты; вместо этого для обеспечения этой функциональности используется полифилл.
Основным последствием этого является то, что большая часть Selenium не будет работать должным образом. Он не может «видеть» Shadow DOM в Internet Explorer так, как в Firefox и Chrome.
Альтернативой является написание тестового фреймворка, который предоставляет альтернативный механизм доступа к элементам через JavaScript — это позволяет размещать элементы через полифилл.
Наша текущая реализация проверяет используемый WebDriver
и либо использует исходную реализацию метода Selenium (в случае Chrome или Firefox), либо нашу собственную альтернативную реализацию (в случае Internet Explorer).
Это означает, что мы хотим, чтобы наша реализация была как можно ближе к реализации Selenium, в ее основе, на уровне взаимодействия с браузером.
Проблема
Я пытаюсь воспроизвести функциональность Actions.click(WebElement onElement)
(источник), в упрощенной форме (без следования шаблону проектирования Builder класса Actions
и предположений, что щелчок производится левой кнопкой мыши и никакими другими клавишами (Ctrl, < kbd>Shift, Alt) удерживаются нажатыми).
Я хочу найти основной код, который обрабатывает щелчок (в частности, в Chrome, Firefox и Internet Explorer), чтобы я мог воспроизвести его как можно точнее, однако я обнаружил, что потерялся в глубокой яме классов и интерфейсов. ..
Новый ClickAction
(исходный код) создается (для последующего выполнения). Выполнение этого включает вызов click() для экземпляра интерфейса Mouse
(источник) ... ааааа, я запутался. Из сгенерированного JavaDoc я вижу, что это реализовано либо EventFiringMouse (< href="https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/support/events/internal/EventFiringMouse.java">источник) или HtmlUnitMouse (source), но я не уверен, какой из них быть реализованы. Я сделал предположение (с небольшим основанием), что будет использоваться HtmlUnitMouse
, что привело меня еще дальше в кроличью нору, глядя на Код HTMLUnit от Gargoyle Software...
Короче, я совсем запутался.
Любое руководство будет высоко оценено :)
Исследования
- Я обнаружил, что был неправ в своем предположении, что HTMLUnit используется Chrome, Firefox и Internet Explorer. Документация показывает, что
RemoteWebDriver
(источник) является подклассомChromeDriver
,FirefoxDriver
иInternetExplorerDriver
.
ChromeDriver
,FirefoxDriver
,InternetExplorerDriver
,HtmlUnitDriver
, другие... Каждый ведет себя по-разному, в зависимости от базового браузера. Итак, первый шаг — выбрать один из них и копнуть глубже. - person Ahmed Ashour   schedule 30.10.2015EventFiringMouse
, так иHtmlUnitMouse
, однако мне не удалось добиться большого прогресса ни в одном из них. - person Eilidh   schedule 02.11.2015HtmlUnitDriver
или HtmlUnit? - person Ahmed Ashour   schedule 02.11.2015Actions.click(WebElement element)
. Я не рассматриваю конкретный случай. Я смотрю, как это делается в Chrome, Firefox и Internet Explorer (не уверен, что ошибся в своем предположении, что они используютHtmlUnit...
) - person Eilidh   schedule 02.11.2015RemoteDriver
, что означает, что фактический код находится на стороне сервера вашего вызова. Никто не использует HtmlUnit, который является симулятором браузера, и не использует RemoteDriver. Я предлагаю вам использовать браузер, который обрабатывает веб-компоненты, и если он неправильно обрабатываетclick
, сообщите об ошибке соответствующей команде. - person Ahmed Ashour   schedule 02.11.2015RemoteDriver
, но просто сообщать об ошибке кому-то другому и прекращать работу над проблемой — это не полезное решение для нас. - person Eilidh   schedule 02.11.2015WebElement.click
? - person Ant's   schedule 19.11.2015