1

iOS 4.2 でのプロジェクトの品質テストのために、Xcode 3.x の Instruments を介して UIAutomation を使用しています。私たちはJavascriptでスクリプトを書いています。私は Javascript を初めて使用し、UIAutomation のドキュメントが (これをどのように表現すればよいでしょうか?) 「スパース」であることがわかりました。

iOSアプリケーションのメインウィンドウに表示されたときに「ビープ音」という名前のボタンの存在を確認する方法について、Etherの天才が教えてくれることを願っていますか?

また、JavaScript で (動的 Web ページではなく) テスト スクリプトを作成するための適切なリファレンスを見つけた人はいますか?

あらゆる支援に感謝します!

よろしく、

スティーブ・オサリバン

4

1 に答える 1

3

おい。
実際、Apple からのドキュメント ( thisおよびthis ) は、私が見つけた唯一のものです。
あなたの質問については試してみてください

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 )を呼び出す必要がある場合があり
ます)。チェーン内のオブジェクトの 1 つが存在しない場合は失敗します. チェーン内のすべてのオブジェクトをチェックする必要があるかもしれません. さらに, 特定のボタンが存在するかどうかだけでなく, 画面に表示されているかどうかもチェックする必要があるかもしれません. この場合, 上記のコード次のようにする必要があるかもしれません:

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);
}

もちろん、それを改善することはできます...しかし、アイデアを得る必要があります。

ところで、述語へのアップルガイド

PS コードはメモ帳で書かれており、チェックされていないため、解析エラーが含まれている可能性があります。

于 2011-03-02T00:13:40.610 に答える