Проверка существования объекта кнопки, используя Javascript, в Xcode UIAutomation and Instruments - PullRequest
1 голос
/ 02 марта 2011

Для тестирования качества нашего проекта на iOS 4.2 мы работаем с UIAutomation через инструменты в Xcode 3.x. Мы пишем наши скрипты в Javascript. Я новичок в Javascript и обнаружил, что документация UIAutomation (как бы это сказать?), "Разреженная".

Я надеюсь, что какой-нибудь гений в Эфире сможет объяснить мне, как проверить наличие кнопки с названием «звуковой сигнал», когда она отображается в главном окне нашего приложения iOS?

Также кто-нибудь нашел хорошие ссылки для написания тестовых скриптов (в отличие от динамических веб-страниц) на JavaScript?

Спасибо за любую помощь!

С уважением,

Стив О'Салливан

1 Ответ

3 голосов
/ 02 марта 2011

Эй.
Фактически документация ( это и это ) от Apple - единственное, что я могу найти.
Что касается вашего вопроса, попробуйте

if(UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].name() === "beep sound")) {
    UIALogger.logPass("Buton Present");
} else {
    UIALogger.logFail("Buton Not Present");
};

Конечно, это предполагает ( elements () [0] ), что ваша кнопка находится первой в дереве объектов под главным окном.Если это не так, вам может потребоваться вызвать другой элемент (( elements () 3 ), или вам может потребоваться вызвать более глубокую иерархию ( elements () [0]] .elements () 3 ).
Имейте в виду, что приведенный выше код не будет работать, если не будет присутствовать один из объектов в цепочке. Возможно, вам придется проверить каждый объект в цепочкеКроме того, вам может потребоваться проверить, присутствует ли данная кнопка не только на экране, но и видна ли она на экране. В этом случае приведенный выше код может выглядеть следующим образом:

if(UAITarget.localTarget().frontMostApplication().mainWindow() && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0] && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].withPredicate("name matches 'beep sound'")) {
    if(UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].isVisible()) {
        UIALogger.logPass("Buton Present");
    } else {
        UIALogger.logFail("Buton Present, but Not Visible");
    }
} else {
    UIALogger.logFail("Buton Not Present");
};

Но теперь удобочитаемость, удобство обслуживания иатрибуты кода избыточного размера страдают. Поэтому я бы поменял его на:

function isButtonWithPredicate (predicate) {
    if(UAITarget.localTarget().frontMostApplication().mainWindow() && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0] && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].withPredicate(predicate)) {
    return true;
} else { 
    throw new Error("button not found, predicate: " + predicate);
}

function getButtonWithPredicate (predicate) {
    try {
        if(isButtonWithPredicate(predicate)) {
            return UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].withPredicate(predicate);
        }
    } catch (error) {
        throw new Error("getButtonWithPredicateError: " + error.message);
    };
}


var strpredicate = "name matches 'beep sound'";
var objButton = null;
try{
    objButton = getButtonWithPredicate(strPredicate);
    if(objButton.isVisible) {
        UIALogger.logPass("Buton Present");
    };
} catch(error) {
    UIALogger.logFail(error.message);
}

Конечно, вы все еще можете улучшить его ... но вы должны понять.

btw справочник Apple по предикатам

PS Код был написан в блокноте и не был проверен, поэтому он может содержать некоторые ошибки синтаксического анализа.

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