Это сообщение об ошибке ...
org.openqa.selenium.JavascriptException: javascript error: $ is not defined
(Session info: chrome=79.0.3945.130)
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'OPTIMIZEQ-LTP03', ip: '192.168.99.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.2'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 79.0.3945.130, chrome: {chromedriverVersion: 78.0.3904.105 (60e2d8774a81..., userDataDir: C:\Users\SHAILE~1.SIN\AppDa...}, goog:chromeOptions: {debuggerAddress: localhost:61006}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(manual, http=localhos..., setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webdriver.remote.sessionid: f5a47b27537f019dacb73462732...}
... означает, что ChromeDriver не смог взаимодействовать с Контекстом просмотра , то есть Chrome Браузер сеанс.
Глубокое погружение
Согласно документации в ReferenceError: «x» не определено эта ошибка означает, что существует несуществующая переменная, на которую есть ссылка в дереве DOM . Эта переменная должна быть объявлена, или вам нужно убедиться, что она доступна в вашем текущем скрипте или области видимости.
Подсказка : при загрузке библиотеки (например, jQuery ), убедитесь, что он загружен перед доступом к переменным библиотеки, таким как «$». Поместите тег, который загружает библиотеку, перед вашим кодом, который ее использует.
Согласно обсуждению JavaScript / jQuery - ошибка «$ is notfined- $ function ()» @Ketan упоминает, что эта ошибка возникает, когда вы не сделали jQuery доступным для вашего скрипта , то есть, возможно, JavaScript / jQuery / AJAX не завершили рендеринг HTML DOM .
Solution
В этих случаях есть 3 (три ) существуют различные подходы для решения проблемы следующим образом:
Библиотека jQuery представляет собой один файл JavaScript, и вы ссылаетесь на него с помощью HTML <script>
тег в разделе <head>
выглядит следующим образом:
<head>
<script src="jquery-3.4.1.min.js"></script>
</head>
Выдается и получает код jQuery из источника.
Примечание : вам не нужно включать type="text/javascript"
внутри тега <script>
, так как это не требуется в HTML5. JavaScript является языком сценариев по умолчанию в HTML5 и во всех современных браузерах.
Подробное обсуждение можно найти в Селен: как селен идентифицирует элементы, видимые или нет? Возможно ли, что он загружается в DOM, но не отображается в интерфейсе пользователя?
Этот сценарий использования
Как вы упомянули, следующая строка завершается ошибкой:
Coords elementCoords = ofElement(driver, element);
Этот метод принимает один из аргументов (последний) как элемент , но при определении вы, похоже, рассматриваете его как список элементов, как в:
@SuppressWarnings("UnusedDeclaration")
public Set<Coords> ofElements(WebDriver driver, WebElement... elements) {
return ofElements(driver, Arrays.asList(elements));
}
Кажется здесь несоответствие типов аргументов.
Дополнительные соображения
Вам нужно позаботиться о нескольких вещах подробнее:
- Вы используете chromedriver = 78.0.3904.105
- Примечания к выпуску chromedriver = 78.0 ясно упоминает следующее:
Поддержка Chrome версия 78
- Вы используете хром = 79,0
- Примечания к выпуску ChromeDriver v79.0 четко упоминает следующее:
Поддерживает Chrome версия 79
- Ваш Selenium Client версия 3.14.0 из 2018-08-02T20: 19: 58,91Z , что почти 1,5 лет старше.
- Ваша версия JDK равна 11.0.2 .
Таким образом, существует явное несоответствие между JDK v8u111 , Selenium Client v3.3.1 , ChromeDriver v2.41 и Chrome Браузер v79.0
Решение
Убедитесь, что: