处理来自 selenium 的自刷新页面

软件测试 自动化测试 javascript 硒-rc
2022-01-26 21:51:27

我在一些 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));
        }
    }
});
3个回答

在这种情况下,您可以等待 Ajax 请求完成。

这样一来,您就不必担心页面是否已加载。ajax 请求完成后继续。

你可以这样做:

        selenium.waitForCondition(
            "selenium.browserbot.getCurrentWindow().jQuery.active == 0",
            timeout);

其中 timeout 是一个可选的整数参数。

如果汉尼拔的回答不起作用,那么对于需要很长时间才能加载的页面对我有用的方法是在导致页面刷新的操作之后直接添加调用方法,或者在下一个操作开始时添加调用方法,它检查页面上始终存在的特定元素是否实际存在。

简单的解决方案是让 selenium 执行一个脚本来覆盖/禁用自刷新的 javascript。
selenium rc 是 selenium 1,但无论如何,javascript 都可以使用两个驱动程序执行。

除此之外,@Hannibal 有一个很好的解决方案,我很可能会自己这样做