StaleElementReferenceException, когда я пытаюсь получить window.dataLayer с помощью Selenide

Я хочу получать события gtm dataLayer из Google Analytics на своей странице и проверять их содержимое, например, после входа/выхода из системы. В тестах использую Selenide + java Пример кода без действий на странице

open("url");
List<Map<String, String>> result = new ArrayList<>();
List<Map<String, String>> dataLayerEventsList = Selenide.executeJavaScript("return window.dataLayer");
        for (Map<String, String> map:dataLayerEventsList) {
            if (map.containsKey("firstKey") && map.containsKey("secondKey"))
                result.add(map);
        }
        return result;

Когда я не выполняю какие-либо действия на странице, я получаю события (просто открываю страницу и возвращаю window.dataLayer), но когда я выполняю какие-либо действия, FE нажимаю на элемент, setValue, а затем, когда я хочу получать события GA таким же образом У меня ошибка в методе Selenide.executeJavaScript("return window.dataLayer")

org.openqa.selenium.StaleElementReferenceException: stale element reference: stale element not found

Пример кода с действиями на странице

open("url");
$(By.className("login-form__select")).click();
SelenideElement login = $x("//div/../input").setValue("5645645");
SelenideElement password = $x("//div/../input").setValue("6666");
$x("//button[contains(@class,'login-form_999')]").click();
List<Map<String, String>> result = new ArrayList<>();
List<Map<String, String>> dataLayerEventsList = Selenide.executeJavaScript("return window.dataLayer");
        for (Map<String, String> map:dataLayerEventsList) {
            if (map.containsKey("firstKey") && map.containsKey("secondKey"))
                result.add(map);
        }
        return result;

Как я могу решить эту проблему? Пожалуйста помоги


person Kate Akulova    schedule 18.04.2020    source источник
comment
StaleElementReferenceException возникает, когда элемент, над которым пытаются выполнить операцию, недоступен в DOM. Используйте WebDriverWait для решения вашей проблемы   -  person SeleniumUser    schedule 18.04.2020
comment
Я пытался подождать и поспать секунд 20, но это не помогло.   -  person Kate Akulova    schedule 18.04.2020
comment
предоставить ссылку или DOM?   -  person SeleniumUser    schedule 18.04.2020
comment
к сожалению не могу. это коммерческое   -  person Kate Akulova    schedule 18.04.2020
comment
Здравствуйте, window.dataLayer – это API, используемый для передачи данных и событий в Диспетчер тегов Google. Из GTM можно настроить триггеры, которые в конечном итоге будут запускать обращения Google Analytics. Не могли бы вы более четко указать, чего вы пытаетесь достичь, и цель этого? Это помогло бы дать лучший ответ   -  person Open SEO    schedule 18.04.2020
comment
Я хочу получать события gtm dataLayer из Google Analytics на своей странице и проверять их содержимое, например, после входа/выхода из системы.   -  person Kate Akulova    schedule 18.04.2020


Ответы (2)


пожалуйста, найдите элемент еще раз, прежде чем найти элемент, который вы пытаетесь щелкнуть.

Что в основном означает Stale Exception, так это то, что ваш элемент не может быть расположен, как известно, поскольку он не находится в DOM, причиной этого является For Ex. вы нашли элемент и, скажем, обновили страницу или перешли на другую страницу, и после этого вы пытаетесь использовать этот элемент, который вы нашли перед выполнением действия, тогда будет выдано исключение Stale Element.

Надеюсь это поможет.

person Sukhangad singh    schedule 18.04.2020
comment
Щелчок или выбор успешны, проблема в использовании метода executeJavaScript(return window.dataLayer) и здесь я не выбираю ни один элемент, и я не понимаю, почему здесь возникает его ошибка =( - person Kate Akulova; 18.04.2020

Я нашел решение. Во-первых, я не могу получить весь список событий window.dataLayer, потому что возникает ошибка, но я могу получить window.dataLayer.lenth и просмотреть каждое событие, которое я выбираю, и использовать try..catch с продолжением, конечно, для обойти мою ошибку

person Kate Akulova    schedule 20.04.2020