【发布时间】:2020-04-18 12:44:22
【问题描述】:
我想在我的页面上从 Google Analytics 获取 gtm dataLayer 事件,并在登录/注销后检查它们的内容。我在测试中使用 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),但是当我执行某些操作时,F.E. 单击元素,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;
我该如何解决这个问题?请帮忙
【问题讨论】:
-
StaleElementReferenceException 当试图对其执行操作的元素在 DOM 中不可用时发生。使用 WebDriverWait 解决您的问题
-
我尝试等待并睡眠大约 20 秒,但没有帮助
-
提供您的链接或 DOM 吗?
-
不幸的是,我不能。这是商业的
-
嗨,
window.dataLayer是用于将数据和事件推送到 Google 跟踪代码管理器的 API。从 GTM 可以配置最终触发 Google Analytics 命中的触发器。您能否更明确地说明您要实现的目标和目的?这将有助于提供更好的答案
标签: java selenium google-analytics google-datalayer selenide