仪器自动化工具:脚本结束而不显式关闭此测试

时间:2013-02-14 00:47:23

标签: ios instruments ios-ui-automation xcode-instruments

我今天在使用仪器中的自动化工具,但在编写工作测试时遇到了问题。以下示例将以Issue: Script ended without explicting closing this test退出。是的,该消息确实说明了明确。我认为这是最近版本的Xcode中引入的拼写错误。这是我第一次尝试使用此工具。将cellCount设置为6会导致传递,但任何事情都会给我“脚本已结束”消息。我做错了还是自动化工具有错误。

UIALogger.logStart("Start Simple Test");
var target = UIATarget.localTarget();
var cellCount = 7;

UIALogger.logMessage("cell count: " + cellCount);

if (cellCount != 6) {
    UIALogger.logFail("Failed");
}

UIALogger.logPass("Passed");

5 个答案:

答案 0 :(得分:2)

我认为发生的事情是您正在错误地关闭日志组。当您说logStart()时,您会在乐器中开始一个日志组,之后您使用logMessage()logError()记录的所有内容都将包含在该组中。

您使用logFail()logPass()关闭的群组看起来就像您尝试过的那样,但您只能拨打其中一个。你需要一个else子句来调用logPass(),如下所示:

if (cellCount != 6) {
    UIALogger.logFail("Failed");
} else {
    UIALogger.logPass("Passed");
}

奇怪的是,当我将您的代码段粘贴到UI自动化中时,我没有收到您提到的问题错误。它只是将两个日志组打印到跟踪日志中。尝试使用像我上面提到的else子句,看看它是否有效。

答案 1 :(得分:1)

我在这里发现了真正的问题。它基本上是说您的应用程序未处于可用模式以在指定点进一步测试。所以请通过/失败或在这个地方添加适当的延迟。

避免这种情况的最简单方法是在每次页面导航后有2秒的延迟功能。这将在获取和显示pano上的数据后加载每个页面中的数据。脚本将顺利运行。

//步骤:1导航/点击

UIATarget.localTarget().delay(2);

//验证

//步骤:2导航/点击

UIATarget.localTarget().delay(2);

//验证

答案 2 :(得分:0)

有多奇怪。正如上所述,我正在遇到同样的问题,我也在使用else条款。

另外,我尝试了如上所述的双重日志记录方法,就像我的if语句之前记录通过或失败一样:

UIALogger.logMessage("My Story Title: " + titleDisplayed);
UIALogger.logMessage("Innocuous Message.");

失败了,这很好 - 除了“Issue”结果和“script ended without expliciting”消息之外,我还想要其他任何内容。所以,我随后评论//第二个logMessage语句并重新运行测试,这次再次获得“Issue”和“script ended without explicating”。

所以,他的上述提示已经被证实是真实的。

我正在运行Xcode和Instruments版本4.6,iPhone模拟器作为6.1项目运行。

---更新 -

无论我做什么,我都无法通过/无法正常工作。在一次运行中,我在日志中得到了令人激动的“Issue: Script ended without explicating”消息,然后如果我对脚本进行了任何更改 - 即使它只是添加一个额外的空格,然后保存它然后再次运行 - 我会得到一个好的传球或失败的结果。

但是,如果我再次立即运行测试而没有任何更改,我将收到“Issue: Script ended without explicating”消息,这将不会消失,直到我在脚本中进行无意义的更改并保存然后运行再次,然后在这一点上,我可能得到一个不错的通过/失败结果(并不总是发生),但如果我再次运行脚本,我将再次得到“Issue: Script ended without explicating”。

到底是什么?我实际上已经花时间重新安装Xcode 4.6但没有运气来改变行为。我非常沮丧。这似乎是仪器中的一个错误。有没有办法向Apple报告?

答案 3 :(得分:0)

我也有这个问题。您必须在logPass或logFail方法中使用您在logStart方法中放置的字符串 - 这就是全部!这意味着例如:

UIALogger.logStart("Add to Whishlist");
//here comes your automation code
UIALogger.logPass("Add to Whishlist");

您可以使用logStart()打开另一项测试,然后使用logPass()方法将其关闭

答案 4 :(得分:0)

我发现,如果您在不同的消息之间放置延迟,它们实际上会显示并评估问题。我开始的问题是,两个连续的logMessages没有正确显示(最后一个被删除)

UIALogger.logMessage("This is some text");
UIALogger.logMessage("This is some text");
//UIATarget.localTarget().delay(1);

仅显示一条输出线。取消评论显示两个......这似乎有点......不一致 - 而且还有更多:(这归于Wulf)

UIALogger.logStart("Add to Whishlist");
UIALogger.logMessage("My Story Title: ");
//UIATarget.localTarget().delay(1);
UIALogger.logMessage("Innocuous Message.");
//UIATarget.localTarget().delay(1);
if (true)
    UIALogger.logPass("Add to Whishlist");
else
    UIALogger.logFail("Add to Whishlist");

我在这里得到了一个“问题”。取消注释有助于解决这个问题。我知道,这不是解决方案。但它对我来说是一种解决方法。

logStart,logFail或logPass中的“string”对我来说无关紧要。