3

我正在尝试将我的 UIAutomation 测试脚本分解成块,以便一次运行一个或一起运行它们。所以我有一个结构:

所有测试.js:

#import "tab-dates.js"
#import "tab-temperatures.js"

标签-dates.js:

#import "../../../Libraries/tuneup_js/tuneup.js"
#import "dpl_assertions.js"

var target = UIATarget.localTarget();
var app = target.frontMostApp();

test("Verify date view is shown", function() {
    assertEquals(tabBar.selectedButton().name(), "Date");
});

它们都位于同一目录中,并被导入到同样位于同一目录中的自动化跟踪文件中。

当我直接运行 tab-dates.js 时,一切都很好。找到 tuneup.js,路径正确,测试通过。但是当我尝试运行 all-tests.js 时,我得到:

脚本抛出未捕获的 JavaScript 错误:找不到变量:在 tab-dates.js 的第 8 行测试

这不是直接路径问题,因为如果我编辑脚本以中断路径,我会得到一个不同的错误,明确表示“找不到文件”。

据我所知,链接导入应该可以工作——我的意思是,这是 tuneup.js 的全部内容(https://github.com/alexvollmer/tuneup_js):

#import "assertions.js"
#import "lang-ext.js"
#import "uiautomation-ext.js"
#import "screen.js"
#import "test.js"
#import "image_assertion.js"

所以我有一个奇怪的情况

  • tab-dates.js 导入 tuneup.js 导入 test.js => OK
  • all-tests.js 导入 tab-dates.js 导入 tuneup.js 导入 test.js => 不正常

这是怎么回事?

4

2 回答 2

2

TL;DR 您运行的初始脚本很特别。要解决此问题,请创建一个包含一个其他脚本的初始脚本,然后应用以下一般规则:

  • 导入是按照它们在文件中出现的顺序完成的
  • 脚本将首先执行,然后执行其导入
  • 进口是深度优先的
  • 一次导入的脚本不会被重新导入

但是,初始脚本不遵守这些规则。

我花了一些时间通过创建四个脚本来解决这个问题:one.js;两个.js;three.js 和 other.js,其中 one.js 导入 two.js;导入三个.js;其中导入 one.js,它们都导入 other.js。除了导入之外,脚本还会记录它们的名称,如下所示:

#import "two.js";
#import "other.js";
UIALogger.logMessage("one.js");

如果我然后运行 ​​one.js,我得到的输出是

2015-03-04 21:21:20 +0000 Default: two.js
2015-03-04 21:21:20 +0000 Default: three.js
2015-03-04 21:21:20 +0000 Default: one.js
2015-03-04 21:21:20 +0000 Default: other.js
2015-03-04 21:21:21 +0000 Default: one.js

然后我创建了一个名为launch.js 的脚本,它只导入one.js 而没有别的。当我运行这个脚本时,我得到的输出是:

2015-03-04 21:27:59 +0000 Default: one.js
2015-03-04 21:27:59 +0000 Default: two.js
2015-03-04 21:27:59 +0000 Default: three.js
2015-03-04 21:28:00 +0000 Default: other.js
2015-03-04 21:28:00 +0000 Default: launch.js

由此我们可以推断:

  • 调用的初始脚本将首先进行导入,然后执行
  • 如果由其他脚本导入,初始脚本将被重新导入并运行一次
  • 进口是深度优先的

所以使用 launch.js 策略来减少你生活中的痛苦。

于 2015-03-04T21:45:40.710 回答
0

正如 Jonathan Penn 所说,这是一个已知的错误,但您可以创建一个头文件来导入测试所需的所有文件,然后在首先运行的任何脚本的开头导入该头文件。

于 2014-10-31T15:26:00.393 回答