如何在 UIAutomation 中使用节点模块

Posted

技术标签:

【中文标题】如何在 UIAutomation 中使用节点模块【英文标题】:How to use node modules with in UIAutomation 【发布时间】:2013-02-26 22:40:37 【问题描述】:

根据苹果的documentation,我可以使用import 语句将一个JS 文件导入另一个。是的,我可以使用 JS 函数并递归调用其他 JS 函数。

但是我可以将节点模块包含在我的自动化中吗? Node/npm 模块似乎有很多工具可以让生活更轻松并避免代码重复。

实际上,我可以通过代码中的以下调用使用一个名为 moment.js 的节点模块

#import "../node_modules/moment/moment.js"

但我对其他 npm 模块的运气并不好。我尝试了一对Faker.js,Charlatan.js,但在 Faker.js 中出现以下错误

脚本引发未捕获的 javascript 错误:找不到变量:窗口 在 Faker.js 的第 618 行

查看 *.js 文件似乎与这些模块的打包方式有关。我的 JS 知识并没有让我到任何地方。

moment js文件最后几行

// CommonJS module is defined
if (hasModule) 
    module.exports = moment;

/*global ender:false */
if (typeof ender === 'undefined') 
    // here, `this` means `window` in the browser, or `global` on the server
    // add `moment` as a global object via a string identifier,
    // for Closure Compiler "advanced" mode
    this['moment'] = moment;

/*global define:false */
if (typeof define === "function" && define.amd) 
    define("moment", [], function () 
        return moment;
    );

Faker js 文件的最后几行

if (typeof define == 'function')
   define(function()
        return Faker;
   );

else if(typeof module !== 'undefined' && module.exports) 
    module.exports = Faker;

else 
    window.Faker = Faker;

我完全可以在节点控制台中使用这些模块,所以这些模块没有问题,只是如何在我的 JS 文件中包含/要求它们。

【问题讨论】:

【参考方案1】:

Faker 必须为我做两件事

    删除“使用严格” 检查窗口是否未定义

    添加此语句

    this['Faker'] = Faker;

【讨论】:

以上是关于如何在 UIAutomation 中使用节点模块的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIAutomation 中从句子中取出特定的单词?

我如何在 XCODE 8、Swift 3 中使用 UIAutomation

如何使用 Jenkins 运行 UIAutomation?

Windows桌面程序自动化控制之uiautomation模块全面讲解

如何在 iPhone 模拟器中工作的 UIAutomation 中获取 captureScreenWithName?

即使在应用退出后,如何使用 UIAutomation 工具继续测试 iOS 应用?