对于我们在iOS 4.2上的项目的质量测试,我们正在通过Xcode 3.x中的Instruments使用UIAutomation。我们用Javascript编写脚本。我是Javascript的新手,并且发现了UIAutomation文档(我该怎么做?),“稀疏”。
我希望以太网中的一些天才可以启发我如何在我们的iOS应用程序的主窗口上显示一个名为“哔声”的按钮时是否存在?
还有没有人在JavaScript中找到编写测试脚本(而不是动态网页)的好参考资料?
感谢您提供的所有帮助!
此致
史蒂夫奥沙利文答案 0 :(得分:3)
嘿。
实际上苹果的文档(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 的)。
请记住,如果链中的某个对象不存在,则上述代码将失败。您可能需要检查链中的每个对象。此外,您可能需要检查给定按钮是否不仅存在,而且是否在屏幕上可见。在这种情况下,上面的代码可能需要如下所示:
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);
}
当然你仍然可以改进它......但你应该明白这一点。
P.S。代码是用记事本编写的,未经检查,因此可能包含一些解析错误。