1

为了在 iOS 4.2 上对我们的项目进行质量测试,我们正在通过 Xcode 3.x 中的 Instruments 使用 UIAutomation。我们正在用 Javascript 编写脚本。我是 Javascript 新手,并且发现 UIAutomation 文档是(我应该怎么写?),“稀疏”。

我希望以太中的一些天才能够启发我如何验证在我们的 iOS 应用程序的主窗口上显示一个名为“哔声”的按钮是否存在?

还有没有人发现在 JavaScript 中编写测试脚本(而不是动态网页)的任何好的参考?

感谢您的任何帮助!

问候,

史蒂夫奥沙利文

4

1 回答 1

3

嘿。
实际上,来自苹果的文档(这个这个)是我唯一能找到的。
至于你的问题试试

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

当然你仍然可以改进它......但你应该明白这个想法。

顺便说一句,苹果指南谓词

PS 代码是用记事本编写的,没有经过检查,因此它可能包含一些解析错误。

于 2011-03-02T00:13:40.610 回答