Selenium UseLegacyImplementation False WebDriverException: ReferenceError: $ не определено

Я только что обновил Selenium Test Project, чтобы использовать новую версию 3.0.1 с 2.53.0. Сейчас я использую Geckodriver v0.11.1 и сейчас тестирую исключительно в Firefox версии 46.0.1.

До обновления у меня был код, который выглядел так:

driver.Navigate().GoToUrl(DefaultBaseURL);
driver.ExecuteScript("$('#" + XXXX + "').val(\"" + XXXX + "\");");

После обновления вторая строка перестает работать со следующей ошибкой:

WebDriverException: ReferenceError: $ не определено

Я снова смогу заработать, если включу UseLegacyImplementation. Согласно веб-сайту Selenium, это Итак, здесь не так много деталей ... но когда я включаю его, кажется, что он работает так же, как 2.53.0.

Мое первое предположение по этой проблеме заключается в том, что это связано со временем, как и в упомянутом сообщении здесь. Но даже когда я помещаю большое время ожидания между двумя строками, конечный результат всегда один и тот же. Похоже, что новая библиотека селена не может обнаружить, что страница уже загрузила jQuery.

Есть ли способ вызвать сценарии, зависящие от JQuery, в Selenium 3.0.1 без включения UseLegacyImplementation?


person David Rogers    schedule 16.12.2016    source источник


Ответы (1)


Свойство UseLegacyImplementation указывает привязкам .NET использовать устаревшую реализацию драйвера на основе расширения браузера, разработанную и поддерживаемую самим проектом Selenium. Другими словами, установка true указывает привязке не использовать geckodriver. Одно из изменений с 2.x на 3.x состоит в том, что значение этого свойства по умолчанию изменилось. В 3.x по умолчанию используется geckodriver.

Если вы используете geckodriver, вы обнаружите, что работа с более поздними версиями Firefox лучше. Возможно, вы столкнулись с ошибкой geckodriver, которая уже была исправлена ​​в более поздней версии браузера. Я бы рекомендовал либо оставить прежнюю реализацию проекта Selenium (UseLegacyImplementation = true), если вы хотите остаться с Firefox 46. Если вы хотите использовать geckodriver, вам следует перейти на более новую версию Firefox.

person JimEvans    schedule 18.12.2016
comment
Спасибо за помощь, я обновился до Firefox 47.0.2, который должен быть последней версией, и отключить UseLegacyImplementation, но у меня все еще есть та же проблема, возможно, это что-то экологическое :( Также у вас есть руководство или ссылка на то, какая версия Каждый компонент совместим с каким другим компонентом, обычно я смотрю примечания к выпуску, но это довольно трудоемкий, а иногда и неполный способ получить эту информацию? - person David Rogers; 19.12.2016
comment
Документация Selenium действительно позор. Информация, которую он дает, неполна или даже полностью отсутствует. - person Elmue; 27.02.2017
comment
Как и во многих добровольных проектах с открытым исходным кодом, @Elmue, документация часто не является первым делом, о котором думают участники. Однако, как и во многих добровольных проектах с открытым исходным кодом, участие в документации - отличный способ принять участие в проекте. Если вы считаете, что документация действительно обидна, запросы на включение безусловно приветствуются. - person JimEvans; 28.02.2017
comment
Я не согласен с вами. Когда я пишу код, я всегда помещаю подробный комментарий вверху каждой функции, который я пишу, который объясняет, что функция делает и какие параметры она принимает. Поскольку большая часть документации по Selenium создается Doxygen автоматически, уже была бы полезная документация, если бы люди, работающие с Selenium, работали таким же образом. Но они делают свою работу очень неряшливо. Например, в FirefoxOptions свойство UseLegacyImplementation имеет бесполезный комментарий. Получает или задает значение, указывающее, следует ли использовать реализацию устаревшего драйвера. Этот комментарий ничего не объясняет - person Elmue; 01.03.2017