[英]How to accurately use getText() with Protractor and Page Object Model in Javascript
我很難從頁面對象返回值。 使用getText()返回整個對象,而不僅僅是文本。 如果我理解正確,這是由於getText()是一個承諾。
如果需要的話,我有我的代碼,但是我要完成的工作與這個流行的在線示例相似。 為了簡單起見,我將使用它。
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);
});
});
這是我很困惑的地方。 期望和測試通過。 但是控制台記錄了整個對象,太長了,無法在此處添加。 絕對不只是“ Hello Julie!”。 我希望澄清兩件事。
一種。 以上是使用getText()進行“期望”語句的准確方法嗎? 我不知道測試如何通過,而console.log是整個對象,而不是必需的文本。 這僅僅是因為“期望”履行了返回的承諾嗎?
b。 下面,我修改了Page Object中的方法,實現了控制台輸出真正是 “ Hello Julie!”的承諾。 問題是,我必須在這里使用“期望”,而不是在我的規范中使用(或者至少我不知道如何僅返回文本)。 這樣在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();
};
從測試人員的角度來看,比較文本似乎更准確,而不是第一個示例所做的事情。 但是,如果第一個示例是可以接受的,並且不建議在頁面對象中包含“期望”,那么我想這就是我要做的!
我相信您需要做的就是使函數異步,然后在變量賦值之前等待。
var log = await angularHomepage.getGreetingText();
這會將文本從promise中拉出,並將其存儲到變量中。
使用then語句可用於從promise中提取文本。 僅當您要記錄文本時才需.getText()
,因為.getText()
語句可以處理.getText()
angularHomepage.getGreetingText().then(function(text){
console.log(text);
expect(text).toBe('Hello Julie');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.