量角器页面对象问题

时间:2016-01-28 13:43:21

标签: javascript protractor pageobjects

我似乎陷入了页面对象的构造中。 我阅读了很多关于页面对象的文档,并且知道它们包含两件事:

  • 页面上显示的元素
  • 与网页互动的功能

当我检查示例文件时,我看到元素是在每个页面对象的开头定义的。 在测试中,pageobject通过require导入。 但我看到的问题是,当需求发生时,对象尚未存在。 有没有其他方法可以解决这个问题而无需在页面加载时执行需求?

非常感谢。 此致

2 个答案:

答案 0 :(得分:6)

有一个新的量角器样式指南即将出现(目前正在审核中),它应该清理很多东西,特别是页面对象的创建和需要部分。这是目前的草案:

关于你的问题,首先,页面对象需要定义为函数,在构造函数中声明页面对象元素:

var QuestionPage = function() {
  this.question = element(by.model('question.text'));
  this.answer = element(by.binding('answer'));
  this.button = element(by.className('question-button'));

  this.ask = function(question) {
    this.question.sendKeys(question);
    this.button.click();
  };
};

module.exports = QuestionPage;

然后,在测试套件顶部要求您的页面对象

var QuestionPage = require('./question-page');

describe('My Test', function() {
    ...
});

在测试套件中实例化您的页面对象:

describe('My Test', function() {
  var questionPage = new QuestionPage();

  // specs
});

答案 1 :(得分:1)

@ alecxe的答案是可靠的,但就个人而言,我更喜欢实际解析module.export:

...
module.exports = new QuestionPage();

因此,您只需要在测试中使用它,而不是在测试中实例化它。只要有可能,我觉得脚手架应该在页面对象中。