【发布时间】:2018-08-15 15:50:47
【问题描述】:
我很难从我的页面对象返回值。使用 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();
这是规范文件。我已将其修改为 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 是整个对象,而不是所需的文本。这仅仅是因为“期望”履行了返回的承诺吗?
b.下面我修改了页面对象中的方法,实现了控制台输出真正是“Hello Julie!”的承诺。问题是,我必须在这里使用“expect”,而不是在我的规范中(或者至少,我不知道如何只返回文本)。像这样在 Page Object 方法本身中有一个期望语句有什么问题吗?还是只返回元素文本的简单方法?
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();
};
从测试人员的角度来看,比较文本似乎更准确,而不是第一个示例在做什么。但是如果第一个例子是可以接受的,并且不建议在页面对象中包含“期望”,那么我想这就是我要做的!
【问题讨论】:
-
阅读他们的文档。 protractortest.org/#/control-flow。 (1) “所有函数都返回承诺。”您正在控制台记录一个承诺(一个对象)。 (2)“茉莉花的期望也适应于理解承诺。” - 这就是
expect行有效的原因,它可以处理承诺 -
expect(angularHomepage.getGreetingText()).toEqual('Hello Julie!');完全可以接受。如果您不喜欢这样做,尽管我会将您的期望移回测试并执行类似angularHomepage.getGreetingText().then(text => { expect(text).toEqual('Hello Julie!'); });的操作
标签: javascript selenium protractor pageobjects