iOS UIAutomation UIAElement.isVisible() 抛出过时的响应?

软件测试 自动化测试 javascript 苹果手机
2022-01-24 12:43:09

我试图在循环中使用 isVisible() 为我的 iOS UIAutomation 创建一个 waitForElement 类型的函数。当我尝试使用以下代码时,在弹出新屏幕时等待元素时失败。该元素显然存在,因为如果我在点击该元素之前执行延迟(2),它可以正常工作。其他人是如何做到这一点的,因为我不知所措......

这是我正在使用的 waitForElement 代码:

function waitForElement(element, timeout, step) {
        if (step == null) {
                step = 0.5;
        }

        if (timeout == null) {
            timeout = 10;
        }

        var stop = timeout/step;

        for (var i = 0; i < stop; i++) {
                if (element.isVisible()) {
                        return;
                }
                target.delay(step);
        }
        element.logElement();
        throw("Not visible");
}
2个回答

如果您的页面在函数执行期间重新加载,那么您必须通过再次找到它waitForElement来刷新。element尝试使用selector作为参数而不是元素并使用findElement函数:

function waitForElement(selector, timeout, step) {
        if (step == null) {
                step = 0.5;
        }

        if (timeout == null) {
            timeout = 10;
        }

        var stop = timeout/step;

        for (var i = 0; i < stop; i++) {
                if (driver.findElement(selector).isVisible()) {
                        return;
                }
                target.delay(step);
        }
        element.logElement();
        throw("Not visible");
}

这个等待应该为你处理。您可以使用谓词或 withValueForKey 指定 isVisible 试试这个...

目标.pushTimeout(超时);element.withValueForKey(1, "isVisible"); 目标.popTimeout();