在javascript中创建pageObject模式(量角器工具)

时间:2016-05-12 21:22:48

标签: javascript protractor

我正在使用带有pageObject概念的Protractor进行e2e测试。

但是,我很难理解为什么每个pageObject都需要创建新对象?

按代码显示我的问题

  1. 目前,我将pageObj.js中的pageObject定义为 var PageObj = function () { this.method1 = function() { //whatever content }; } module.exports = PageObj;
  2. 并在测试规范文件中将其作为

    调用
    var PageObj = require('./pageObject/pageObj.js');
    var pageObj = new PageObj(); 
    
    //use pageObj's method here;
    pageObj.method1();
    
    1. 但是,我认为下面的方法比较简单,为什么我不应该使用它?
    2. pageObj.js中定义相同的方法 ```

      module.exports = {
          method1: function() {
              //whatever content;
          },
      

      将其作为

      调用
      var pageObj = require('./pageObject/pageObj.js');
      
      //use pageObj's method here;
      pageObj.method1();
      

2 个答案:

答案 0 :(得分:3)

有时您可能使用相同的页面对象进行多次测试,并且您可能希望在一个测试或一组测试期间存储表示当前或更改页面状态的数据。使用它作为类/构造函数可以让你在每次测试之间都有一个清晰的状态。

如果你的摄像头现在和将来都适用于你,并且不限制你,它完全没问题,只是对于这些更复杂的情况,你可能需要使用实例化页面对象来实现你所需要的。

在我们公司,我们更喜欢坚持使用一种模式,而不必调整以将页面对象用作此处的对象,并将其作为构造函数。因此,为了在我们的测试中保持更加统一,我们只需遵循建议的样式+此模式已经解决,如果它们遵循相同的准则,则在项目之间切换更容易。

答案 1 :(得分:2)

正如@Tom所提到的,使用对象文字很好,但可能是限制性的。如果我不必扩展其他页面(例如,一个basePage),我会使用它们。我也觉得在规范中实例化页面对象有点笨拙,所以我选择介于两者之间的解决方案..

var PageObj = function() {
  this.method1 = function() { //whatever content };
};
module.exports = new PageObj();

然后你的规格...

var pageObj = require('./pageObject/pageObja ');

//use pageObj's method here;
pageObj.method1();