上周我在这个问题上一直在绞尽脑汁,无处可去。目前,每当我在仪器中运行测试时,通过/失败记录功能几乎总是报告:
问题:脚本结束时没有说明关闭此测试
注意 - 是的,拼写错误是正确的
但我的记录方法是正确的。有时当我对测试进行更改时,可能只是添加额外的空格或者注释,然后保存并再次运行,通过/失败功能实际上将起作用!
但是如果在没有任何更改的情况下立即再次运行相同的代码,则会再次出现Issue: Script ended without explicting closing this test
问题。
令人抓狂!
以下是我的测试代码的简略示例:
var target = UIATarget.localTarget();
var app = UIATarget.localTarget().frontMostApp();
var testName = "LoginCreateEntry";
//Start test logging
UIALogger.logStart(testName);
//**Do UI automation stuff here generated by Instruments/record**
//The automation creates a list entry in my application
//The flow goes, run the automation that creates the entry, then verify that the entry
//got created as expected and is visible to the user in the iPhone interface.
var window = app.mainWindow();
var tableView = window.tableViews()[0];
var tableGroup = tableView.groups()[0];
var entryName = "My Dogs!";
var myEntry = tableView.cells()[0].name();
//Do a bunch of UI automation here to create my entry, which results in the entry
//appearing in the mainWindow with the label: My Dogs!
//Get the value held in myEntry to print to the log so that I know
//the variable has a value in it to evaluate
UIALogger.logMessage("My Story Title: " + myEntry);
//If myEntry evaluates to true, then call this test a pass.
if (myEntry === entryName) {
UIALogger.logMessage("My entry was created!");
//Mark the test as a PASS
UIALogger.logPass(testName);
}
else {
UIALogger.logMessage("My entry was not created!");
//Mark the test as a FAIL
UIALogger.logFail(testName);
}
//End test
如前所述,当运行此代码时,我得到:
问题:脚本结束时未说明关闭此测试
但是如果我添加第二个logMessage()
方法,或者对脚本进行任何更改 - 甚至添加注释,并保存这些更改然后再次运行 - 那么通过/失败将有80%的可能性为一次运行工作。但是如果代码然后立即再次运行而没有任何更改,则会再次出现激烈的“Issue: Script ended...
”行为。
我在这里结束了。任何帮助或反馈都将非常感激!
此外,其他人也遇到了同样的问题:Instruments Automation Tool: Script Ended Without Explicitly Closing This Test
--------------------- UPDATE ------------------------- ---
我现在在运行Xcode 4.6的单独MacBook Pro上复制了这个问题。我也做了各种努力故意让我的测试失败 - 只是为了得到反应,但仍然得到Issue: Script ended without expliciting closing this test
日志消息,这告诉我条件可能甚至没有被读取。然而,再次,如果我对脚本进行了任何微小的更改,然后保存这些更改并再次运行,那么通过/失败功能很可能会在单次运行中起作用,然后开始出现“问题:脚本结束.. “即使没有更改脚本,下次运行时也会再次出现行为。
---------------------更新x 2 ----------------------- -----
这是IF声明似乎是非触发,我甚至无法使用断点来确认这一点。但我刚刚进行了一个简单的测试:
UIALogger.logStart();
if (5 < 10)
{
//Mark the test as a PASS
UIALogger.logPass();
}
else
{
//Mark the test as a FAIL
UIALogger.logFail();
}
仍然有Issue: Script ended without explicating closing this test
---------------------更新x 3 ----------------------- -----
所以,我刚刚在Instruments中创建了一个全新的单独脚本,只有下面的代码,现在无论我如何更改IF
语句中的相对值,pass / fail总是有效。哇,这一刻变得越来越陌生了。
var target = UIATarget.localTarget();
UIALogger.logStart();
if (5 > 10)
{
//Mark the test as a PASS
UIALogger.logPass();
}
else
{
//Mark the test as a FAIL
UIALogger.logFail();
}
答案 0 :(得分:1)
好的,问题是真实的,可能只影响Xcode 4.6。该问题在多台计算机和多个跟踪脚本上重复出现。这是解决方案:
在if语句中添加等待,如下所示:
UIALogger.logStart( testName );
//Do automation stuff here
if (5 < 10) {
UIALogger.logMessage("We passed!");
//Wait a moment
target.delay(1);
UIALogger.logPass( testName );
} else {
UIALogger.logMessage("We Failed!");
UIALogger.logFail( testName );
UIALogger.logFail( testName );
}
此外,这可能听起来很愚蠢 - 但它对我有用,请注意IF语句的logFail()部分没有延迟,但有两个logFail()语句(有时3 logFail()需要陈述)。如果在IF语句的失败部分中使用延迟,则将获得ISSUE消息而不是干净的FAIL消息。不,我不是在开玩笑。是的,这很愚蠢。
答案 1 :(得分:0)
我尝试了Wulf的答案和其他几个,但没有一个总是有效,但我发现在logFail / logPass之后添加延迟几乎总是会导致正确关闭测试。
像这样:
UIALogger.logPass(testName);
target.delay(1);
同样失败。请注意,它也不会给你几个日志失败:
UIALogger.logFail(testName);
target.delay(1);
我知道这个话题很老,但我希望这对某人有所帮助。