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

时间:2011-08-12 18:19:45

标签: javascript iphone ios ipad ios-ui-automation

我正在尝试在循环中使用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");
}

1 个答案:

答案 0 :(得分:0)

您正在将'element'对象传递给此函数。当函数启动时,你的'element'对象有 isVisible 属性 false ,或者当你传递 [object UIAElement Nil]时,屏幕上没有这样的对象/ em>的。尝试在任何时候获取此类对象的属性 isVisible 将始终返回 false

如果希望此功能起作用,则需要将“element”作为对象传递到函数中。 而不是

if (element.isVisible())

首先需要获取元素对象并尝试获取isVisible()属性。

if (target.manWindow().elements()[0].isVisible())

在此更改之后,将不需要传递'element'对象,因为此函数仅适用于一个元素。

要使此函数与任何元素一起使用,您需要传递的不是“元素”对象,而是返回要检查的“元素”对象的函数。 这是一个例子:

var target = ...;
var mainWindow = ...;

//function that returns firstObject
var firstElement = function()
{
return mainWindow.elements()[0];
}
//function that returns secondObject
var secondElement = function()
{
return mainWindow.elements()[1];
}

//这是您在'等待'功能中需要更改的内容。改变

if (element.isVisible())

if (element().isVisible())

您的函数调用示例:

waitForElement(firstElement, 10, 1);
waitForElement(secondElement, 10, 1);

注意:如果您使用 firstElement()调用 waitForElement 函数 - 函数将失败并出现相同的错误。这使得您的测试更加复杂,但它确实有效。