在Nightwatch JS的Page Objects中使用execute命令

时间:2017-03-29 15:46:55

标签: javascript automated-tests frontend nightwatch.js pageobjects

我在Nightwatch中实现Page Object时遇到问题。假设我有一个登录方案。我需要滚动到元素 - 我正在使用thar执行函数。

module.exports = {  
   'Login' : function (browser) {
    browser.url(this.launchUrl)
       .setValue('input[name=username]', 'admin')
       .setValue('input[name=password]', 'password')
       .execute(function () {
            document.querySelector('input[type=submit]').scrollIntoView();
        }, [])
       .click('input[type=submit]');
    browser.end();
    }
}

我想将此登录代码重构为Page Object

module.exports = {  
  url: function() {
    return this.api.launchUrl;
  },
  commands: [scrolling],
  elements: {
    usernameField: {
      selector: 'input[name=username]'
    },
    passwordField: {
      selector: 'input[name=password]'
    },
    submit: {
     selector: 'input[type=submit]'
  }
  }
};

我想'隐藏'这个执行命令并将其打包成命令,如:

var scrolling = {
  scroll: function(){
    return this.execute(function () {
      document.querySelector(input[type=submit]').scrollIntoView();
    }, []);
  }
};

不幸的是,似乎执行命令不适用于Page Object。

当我想使用Page Object时,如何通过执行JavaScript代码来解决这个问题?我该如何封装它?

2 个答案:

答案 0 :(得分:1)

答案很简单 1)选择器中缺少引号。 2)在Object Pattern中使用execute(),需要使用this.api:

运行它
this.api.execute(function () {
             document.querySelector('input[type=submit]').scrollIntoView();
          }, []);

答案 1 :(得分:0)

找到了答案

ForthStCheck:function(){
   this.api.execute('scrollTo(0,500)')
   this.waitForElementVisible('@forthStationPlayBtn',5000)
}