#import如何在iOS的UI自动化中工作?

baa*_*der 7 javascript ui-automation ios ios-ui-automation

我正在制作一个小型测试框架,它使用JavaScript模块模式在iOS上进行UI自动化测试.但是,基于#import和扩展模块,我似乎得到了奇怪的结果.

我有一个基本测试模块叫Tester-Module.js:

(function() {
  var Tester = this.Tester = {};

  Tester.setUp = function() {
    UIALogger.logMessage('Regular SetUp()');
  }
}).call(this);
Run Code Online (Sandbox Code Playgroud)

如果我在我的测试用例中导入此模块,它可以正常工作.这是测试文件tester.js(tester.js我在Instruments中导入的文件):

#import "./Tester-Module.js"

// Prints 'Regular SetUp()'
Tester.setUp();
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试Tester-Module.js在另一个模块文件中扩展模块,我就无法引用Tester对象.Tester-Extension.js扩展了以下定义的Tester模块Tester-Module.js:

#import "./Tester-Module.js"

// Outputs:
// Exception raised while running script:
// ReferenceError: Can't find variable: Tester\n
Tester.setUp = function() {
  UIALogger.logMessage('Overwritten SetUp()');
}
Run Code Online (Sandbox Code Playgroud)

更新的测试用例文件tester.js:

#import "./Tester-Extension.js"

// Exception is thrown before this
Tester.setUp();
Run Code Online (Sandbox Code Playgroud)

我希望相关的问题是:

  • 为什么我不能在里面引用Tester对象Tester-Extension.js,但可以在tester.js

  • #import宏在做什么?

baa*_*der 5

经过一些更多的搜索和测试后,看起来#import在UI自动化框架中不支持在每个模块文件中使用 - 类似于Node.js中的require.

解决方法是包含一个头文件,该文件导入每个模块,然后只在测试用例中导入它.使用上面的示例,头文件看起来像:

// Tester-Header.js
#import "./Tester-Module.js"
#import "./Tester-Extension.js"
Run Code Online (Sandbox Code Playgroud)

而测试文件只会导入头文件,如下所示:

#import "./Tester-Header.js"

// Prints "Overwritten SetUp()"
Tester.setUp();
Run Code Online (Sandbox Code Playgroud)

五月母亲UI BDD框架具有的更广泛的实施例的头文件和导入头文件到一个测试文件.披露:我编写了框架并最初问了这个问题,以使框架更加模块化.