1

我今天正在使用 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");
4

5 回答 5

2

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

您关闭了与您尝试执行的任何一个logFail()logPass()其中一个的组,但您只能调用其中一个或另一个。你需要一个 else 子句来这样调用logPass()

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

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

于 2013-02-14T02:01:33.397 回答
1

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

因此,避免这种情况的最简单解决方案是在每个页面导航后设置一个 2 秒的延迟功能。在 pano 上获取和显示数据后,这将在每个页面中加载数据。脚本将顺利运行。

//Step:1 导航/点击

UIATarget.localTarget().delay(2);

//确认

//步骤:2 导航/点击

UIATarget.localTarget().delay(2);

//确认

于 2014-04-14T06:19:53.550 回答
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 Emulator 作为 6.1 项目运行。

- -更新 -

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

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

有没有搞错?我实际上已经花时间重新安装 Xcode 4.6,但没有运气改变行为。我深感沮丧。这似乎是仪器中的一个错误。有没有办法向苹果报告这个?

于 2013-03-06T22:44:30.747 回答
0

我也有这个问题。您还必须在 logPass 或 logFail 方法中将您放在 logStart 方法中的字符串 - 仅此而已!例如,这意味着:

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

您可以使用打开另一个测试并使用方法logStart()关闭它logPass()

于 2014-01-10T14:26:50.257 回答
0

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

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 中的“字符串”实际上对我来说并不重要。

于 2014-01-28T13:35:15.947 回答