Контекст предоставляется в случае, если кто-либо знает об альтернативном способе решения более крупной проблемы.
Контекст проблем
Я возглавляю разработку основы автоматизации тестирования для веб-приложения, которое использует веб-компоненты. Это вызвало проблему при тестировании в Internet Explorer, поскольку Internet Explorer не поддерживает веб-компоненты изначально; вместо этого для обеспечения этой функциональности используется polyfill.
Первичным следствием этого является то, что большая часть Selenium не будет работать должным образом. Он не может "видеть" Shadow DOM в Internet Explorer так, как он может в Firefox и Chrome.
Альтернативой является создание тестовой структуры, которая предоставляет альтернативный механизм доступа к элементам через JavaScript - это позволяет элементам размещаться через polyfill.
Наша текущая реализация проверяет используемую WebDriver
и либо использует оригинальную реализацию метода Selenium (в случае Chrome или Firefox), либо нашу собственную альтернативную реализацию (в случае Internet Explorer).
Это означает, что мы хотим, чтобы наша реализация была как можно ближе к реализации Selenium, по своей сути, к взаимодействию с браузером.
Проблема
Я пытаюсь реплицировать функциональность Actions.click(WebElement onElement)
(source) в упрощенной форме (не следуя шаблону проектирования Builder класса Actions
и предположения, что щелчок левой кнопкой мыши и никакие другие клавиши (Ctrl, Shift, Alt) удерживаются).
Я хочу найти основной код, который обрабатывает щелчок (в частности, в Chrome, Firefox и Internet Explorer), поэтому я могу скопировать его как можно ближе, однако я обнаружил, что потерял себя в глубокой яме классов и интерфейсы...
Создан новый ClickAction
(источник) (для последующего выполнения). Выполнение этого включает вызов "click()" для экземпляра интерфейса Mouse
(источник)... aaaaand Я потерян. Я вижу из сгенерированного JavaDoc, что это реализовано с помощью EventFiringMouse (источник) или HtmlUnitMouse (источник), но я не уверен, какой из них будет реализован. Я сделал предположение (с небольшим основанием), что HtmlUnitMouse
будет использоваться, что привело меня дальше вниз по кроличьей дыре, глядя на код HTMLUnit от Gargoyle Software...
Короче говоря, я полностью потерян.
Любое руководство было бы высоко оценено:)
Исследование
- Я обнаружил, что я ошибался в своем предположении, что HTMLUnit используется Chrome, Firefox и Internet Explorer. Документация показывает, что
RemoteWebDriver
(источник) подклассифицированChromeDriver
,FirefoxDriver
иInternetExplorerDriver
.