gpt4 book ai didi

java - 处理来自 selenium 的自刷新页面

转载 作者:搜寻专家 更新时间:2023-11-01 00:53:37 25 4
gpt4 key购买 nike

我一直遇到一些 java selenium-rc 测试的间歇性错误,我认为这些错误与具有 ajax 轮询并在服务器上达到某些条件时自动刷新的页面有关。在这种情况下,我无法让 selenium 等待页面加载,因此我遇到了一堆随机的“无法访问 document.body”错误。

那么,有什么方法可以让 selenium 优雅地处理这种情况吗?如果没有,有什么方法可以检测用户是否是来自页面 javascript 的 selenium,并禁用自动刷新?

如果有帮助的话,页面中的 javascript 代码看起来像...

var ajax = new Ajax(url, { 
update: state,
method: 'get',
onComplete: function(message) {
if (some_condition) {
window.location.replace(unescape(window.location));
}
}
});

最佳答案

一个解决方案可能是始终使用 waitForConditionisElementPresent,然后再尝试与被测应用程序进行交互。您可以将以下方法放在父类(super class)中,以使您的测试更具可读性。或者,您可以为执行此等待的常见 Selenium 命令创建辅助方法。

/** Waits for an element to be present */
public static void waitForElementToBePresent(String locator) {
session().waitForCondition("var value = selenium.isElementPresent('" + locator.replace("'", "\\'") + "'); value == true", "60000");
}

您可能还想等待元素可见,因为仅等待它出现并不总是足够的(想象一个始终存在但隐藏到特定条件的文本框)。您可以将其与上述方法结合使用:

/** Waits for an element to be visible */
public static void waitForElementToBeVisible(String locator) {
waitForElementToBePresent(locator);
session().waitForCondition("var value = selenium.isVisible('" + locator.replace("'", "\\'") + "'); value == true", TIMEOUT);
}

顺便说一下,WebDriver (Selenium 2) 团队正在研究隐式等待,特别是为了解决元素未立即出现的 AJAX 问题。

关于java - 处理来自 selenium 的自刷新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com