org.openqa.selenium.JavascriptException: javascript ошибка: $ не определена ошибка при получении снимка координаты с Ashot с использованием ChromeDriver Selenium - PullRequest
1 голос
/ 11 февраля 2020

Я столкнулся со странной проблемой при работе с AShot. Ashot отлично работает для целых снимков экрана, но при выборочном снимке экрана это ПЛОХО . Выдает ошибку в CoordsProvider классе при получении координат элемента. Я использую неисправную сборку или продукт?

public abstract class CoordsProvider implements Serializable {

public abstract Coords ofElement(WebDriver driver, WebElement element);

public Set<Coords> ofElements(WebDriver driver, Iterable<WebElement> elements) {
    Set<Coords> elementsCoords = new HashSet<>();
    for (WebElement element : elements) {
        ***Coords elementCoords = ofElement(driver, element);  //fails here***
        if (!elementCoords.isEmpty()) {
            elementsCoords.add(elementCoords);
        }
    }
    return Collections.unmodifiableSet(elementsCoords);
}

@SuppressWarnings("UnusedDeclaration")
public Set<Coords> ofElements(WebDriver driver, WebElement... elements) {
    return ofElements(driver, Arrays.asList(elements));
}

@SuppressWarnings("UnusedDeclaration")
public Set<Coords> locatedBy(WebDriver driver, By locator) {
    return ofElements(driver, driver.findElements(locator));
}
}

enter image description here Трассировка стека

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...}
Session ID: f5a47b27537f019dacb734627324a790
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na]
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187) ~[selenium-remote-driver-3.14.0.jar:na]
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) ~[selenium-remote-driver-3.14.0.jar:na]
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) ~[selenium-remote-driver-3.14.0.jar:na]
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) ~[selenium-remote-driver-3.14.0.jar:na]
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548) ~[selenium-remote-driver-3.14.0.jar:na]
    at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:485) ~[selenium-remote-driver-3.14.0.jar:na]
    at ru.yandex.qatools.ashot.util.JsCoords.findCoordsWithJquery(JsCoords.java:30) ~[ashot-1.5.2.jar:na]
    at ru.yandex.qatools.ashot.coordinates.JqueryCoordsProvider.ofElement(JqueryCoordsProvider.java:13) ~[ashot-1.5.2.jar:na]
    at ru.yandex.qatools.ashot.coordinates.CoordsProvider.ofElements(CoordsProvider.java:21) ~[ashot-1.5.2.jar:na]
    at ru.yandex.qatools.ashot.AShot.takeScreenshot(AShot.java:115) ~[ashot-1.5.2.jar:na]
    at ru.yandex.qatools.ashot.AShot.takeScreenshot(AShot.java:132) ~[ashot-1.5.2.jar:na]
    at com.optq.main.util.SeleniumDriverUtility.captureAShotElement(SeleniumDriverUtility.java:563) ~[classes/:na]

Любая помощь или альтернативы Ashot Добро пожаловать, пожалуйста, помогите мне в этом.

1 Ответ

2 голосов
/ 11 февраля 2020

Это сообщение об ошибке ...

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


Решение

Убедитесь, что:

...