iOS UIAutomation UIAElement.isVisible () выбрасывает устаревший ответ? - PullRequest
2 голосов
/ 12 августа 2011

Я пытаюсь использовать isVisible () в цикле для создания типа waitForElement функции для моего iOS UIAutomation. Когда я пытаюсь использовать следующий код, он терпит неудачу при ожидании элемента, когда появляется новый экран. Элемент явно присутствует, потому что если я сделаю задержку (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 голосов
/ 10 июля 2012

Вы передаете объект 'element' этой функции.Когда функция запускается, ваш объектный элемент имеет isVisible свойство false или когда такого объекта на экране нет, вы передаете [object UIAElement Nil] ,Попытка получить свойство isVisible для этого типа объекта в любое время всегда будет возвращать false .

Если вы хотите, чтобы эта функция работала, вам нужно передать элемент в качестве функции в вашу функцию.Поэтому вместо

if (element.isVisible())

вам сначала нужно получить объект элемента и попытаться получить свойство isVisible ().

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

После этого изменения не будет необходимости передавать объект 'element', так как эта функция будет работать только с одним элементом.

Чтобы эта функция работала с любым элементом, вам нужно передать не объект 'element', а функцию, которая возвращает объект '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);

ПРИМЕЧАНИЕ: если вы вызовете функцию waitForElement с firstElement () - функция завершится с той же ошибкой.Это усложняет ваши тесты, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...