在UIAutomation javascript中链接#imports

时间:2013-07-25 21:04:14

标签: ios-ui-automation

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

全tests.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错误:无法找到变量:test-tab.days的第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 import tuneup.js imports test.js =>行
  • all-tests.js导入tab-dates.js导入tuneup.js导入test.js =>不行。

发生了什么事?

2 个答案:

答案 0 :(得分:2)

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

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

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

我花了一些时间通过创建四个脚本来解决这个问题:one.js; two.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策略可以减轻生活中的痛苦。

答案 1 :(得分:0)

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