如何在Javascript

时间:2018-03-07 13:57:55

标签: javascript selenium protractor pageobjects

我很难从页面对象中返回值。使用getText()返回整个对象,而不仅仅是文本。这是因为如果我理解正确的话,getText()是一个Promise。

如果需要,我有我的代码,但我想要完成的内容与这个流行的在线示例类似。我将它用于它的简单性。

var AngularHomepage = function() {
  var nameInput = element(by.model('yourName'));
  var greeting = element(by.binding('yourName'));

  this.get = function() {
    browser.get('http://www.angularjs.org');
  };

  this.setName = function(name) {
    nameInput.sendKeys(name);
  };

  this.getGreetingText = function() {
    return greeting.getText();
  };
};
module.exports = new AngularHomepage();

这是spec文件。我已经将它修改为console.log返回。

var angularHomepage = require('../pages/AngularPage');
describe('angularjs homepage', function() {
  it('should greet the named user', function() {
    angularHomepage.get();

    angularHomepage.setName('Julie');
    var log = angularHomepage.getGreetingText();
    expect(angularHomepage.getGreetingText()).toEqual('Hello Julie!');
    console.log(log);
  });
});

这里我非常困惑。期望和测试通过。但是控制台会记录整个对象,这里添加的时间太长了。绝对不仅仅是"你好朱莉!"。我想对两件事做一些澄清。

一个。上面是一个准确的方式,以期望"期待" getText()声明?我不知道测试如何通过,而console.log是整个对象,而不是必需的文本。这只是因为"期待"履行归还的承诺?

湾下面我修改了Page Object中的方法,实现了控制台输出真正 " Hello Julie!"的承诺。问题是,我必须使用" expect"在这里,而不是在我的规范中(或者至少,我不知道如何仅返回文本)。在Page Object方法本身中有一个expect语句有什么问题吗?或者只是简单地返回元素的文本?

  this.getGreetingText = function() {
    greeting.getText().then(function (text) {    
      console.log(text);
      expect(text.toEqual('Hello Julie!'));
  });
    // expect is done, no return needed.
    //return greeting.getText();
  };

从测试人员的角度来看,比较文本似乎更准确,而不是第一个例子在做什么。但是,如果第一个例子是可以接受的,并且不建议"期望"在页面对象中,我想那就是我要做的事情!

2 个答案:

答案 0 :(得分:0)

我相信你需要做的就是让你的函数异步,然后在变量赋值之前抛出等待。

var log = await angularHomepage.getGreetingText();

这会将文本从承诺中删除并将其存储到变量中。

答案 1 :(得分:0)

使用then语句可以从promise中提取文本。只有在您希望记录文本时才需要这样做,因为expect语句可以处理.getText()

angularHomepage.getGreetingText().then(function(text){
    console.log(text);
    expect(text).toBe('Hello Julie');
});