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;
我如何解决这个问题?求求你,救命
# 1 楼答案
我找到了决定。首先,我不能得到所有窗口的列表。数据层事件,因为发生错误,但是,我可以获取窗口。数据层。lenth,并查看我选择的每一个事件需要的,并使用try。。抓住我的错误,当然要继续
# 2 楼答案
请在查找要单击的元素之前再次查找该元素
Stale Exception的基本意思是无法定位您的元素,因为它不在DOM know中,其背后的原因是Ex。您定位了一个元素,让我们假设您刷新了页面或导航到其他页面,然后尝试使用在执行操作之前找到的元素,然后将抛出过时元素异常
希望这有帮助