StaleElementReferenceException, когда я пытаюсь получить window.dataLayer с Selenide - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу получать события 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.execute JavaScript ("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;

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

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

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

0 голосов
/ 18 апреля 2020

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...