有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java StaleElementReferenceException当我尝试获取窗口时。硒化物数据层

例如,我想在我的页面上从Google Analytics获取gtm数据层事件,并在登录/注销后检查其内容。我在测试中使用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),但当我执行某些操作时,例如,单击元素,设置值,然后当我想要以相同的方式获取GA事件时,我在方法Selenide中有一个错误。executeJavaScript(“返回窗口.数据层”)

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) 个答案

  1. # 1 楼答案

    我找到了决定。首先,我不能得到所有窗口的列表。数据层事件,因为发生错误,但是,我可以获取窗口。数据层。lenth,并查看我选择的每一个事件需要的,并使用try。。抓住我的错误,当然要继续

  2. # 2 楼答案

    请在查找要单击的元素之前再次查找该元素

    Stale Exception的基本意思是无法定位您的元素,因为它不在DOM know中,其背后的原因是Ex。您定位了一个元素,让我们假设您刷新了页面或导航到其他页面,然后尝试使用在执行操作之前找到的元素,然后将抛出过时元素异常

    希望这有帮助