我今天在使用仪器中的自动化工具,但在编写工作测试时遇到了问题。以下示例将以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");
答案 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”对我来说无关紧要。