【问题标题】:How to use Javascript namespacing in Protractor automation?如何在量角器自动化中使用 Javascript 命名空间?
【发布时间】:2017-04-01 21:47:09
【问题描述】:

我有 3 个文件,即 conf.js、actionwords.js、project_test.js。 Actionwords.js 和 project_test.js 是从 hiptest 工具生成的文件。所以我需要使用这个结构来自动化测试用例。当我通过 cmd 运行时,我得到了错误。

我跑了:

protractor conf.js

消息: 失败:无法读取未定义的属性“theApplicationURL”

堆栈: TypeError:无法读取未定义的属性“theApplicationURL”

// conf.js

exports.config = {
 framework: 'jasmine2',
 directConnect: true,
 seleniumAddress: 'http://localhost:4444/wd/hub',
 specs:['path to/project_test.js'],
 capabilities: { 'browserName': 'chrome' }
 };

//actionwords.js

var Actionwords = {
theApplicationURL: function () {
browser.get('localhost');
browser.driver.manage().window().maximize();
browser.sleep(5000);
   },
};

//project_test.js

describe('Test', function () {
beforeEach(function () {
this.actionwords = Object.create(Actionwords);
});

it('Login_Test (uid:fe6d6670-a864-4d0f-a867-3faf9f51ff8d)', function () {
// Given the application URL
this.actionwords.theApplicationURL();
});
});

谁能帮我解决这个问题?

【问题讨论】:

  • 将你的actionwords变成一个函数而不是对象并导出它,然后在project_test.js中使用require()

标签: javascript jquery automation jasmine protractor


【解决方案1】:

这样改:

var actionwords = {
  theApplicationURL: function () {
    browser.get('localhost');
    browser.driver.manage().window().maximize();
    browser.sleep(5000);
  },
};

module.exports = actionwords;

测试:

var actionwords = require("actionwords.js")

describe('Test', function () {
  it('Login_Test (uid:fe6d6670-a864-4d0f-a867-3faf9f51ff8d)', function () {
    // Given the application URL
    actionwords.theApplicationURL();
  });
});

this的评论的反应:

您可以在beforeEach 中将其分配给此范围:

var actionwords = require("actionwords.js")

describe('Test', function () {
  beforeEach(function () {
    this.actionwords = actionwords;
  });
  it('Login_Test (uid:fe6d6670-a864-4d0f-a867-3faf9f51ff8d)', function () {
    // Given the application URL
    this.actionwords.theApplicationURL();
  });
});

【讨论】:

  • 具体来说:失败:无法读取未定义的属性“theApplicationURL”得到这个..
  • 消息:失败:actionwords.theApplicationURL 不是函数
  • 又更新了,你也要导出
  • luboskrnac :感谢您的回答。它正在工作..但我无法更改我的测试文件。原因是我从工具中导出它。所以假设有 60000 个测试用例,我不能为每个测试用例更改我的测试文件。我需要将其保留为 this.actionwords.theApplicationURL();
  • 所以我无法从 actionwords.theApplicationURL() 中删除它;因为那是我从工具中得到的结构。请您在这方面帮助我更多。
【解决方案2】:

beforeEach(...) 中,this 指的是传递给它的匿名函数。 it(...) 也是如此。

describe范围内声明一个变量

describe('Test', function() {
    var actionwords = Object.create(Actionwords);

    it('Login_Test (uid:fe6d6670-a864-4d0f-a867-3faf9f51ff8d)', function() {
        actionwords.toApplicationURL();
    });
});

【讨论】:

  • 试过了。但没有奏效。 ReferenceError: Actionwords 未定义
  • 哪一行?调用“Object.create”或调用“actionwords.toApplicationURL”时?
  • 声明var Actionwords = require("actionwords.js")
  • @Sudharsan Selvaraj:我之前就做过。还是不行。
  • 具体来说:失败:无法读取未定义的属性“theApplicationURL”
【解决方案3】:

更新你actionword.js如下,

var Actionwords = {
theApplicationURL: function () {
  browser.get('localhost');
  browser.driver.manage().window().maximize();
  browser.sleep(5000);
 },
};
module.exports = new Actionwords();

你的project_test.js 会像,

this.actionwords = require("actionword.js");

describe('Test', function () {
 it('Login_Test (uid:fe6d6670-a864-4d0f-a867-3faf9f51ff8d)', function () {
   this.actionwords.theApplicationURL();
 });
});

【讨论】:

  • 您导出对象不是对象功能。因此,如果未在测试规范中使用,可能会浪费空间。
猜你喜欢
  • 2014-10-17
  • 2012-05-23
  • 1970-01-01
  • 2011-09-05
  • 2014-07-05
  • 1970-01-01
  • 2013-01-03
  • 2016-03-05
  • 2021-09-27
相关资源
最近更新 更多