Вы должны знать механизм о том, как транспортир, чтобы найти элемент.Транспортир только для запуска поиска элемента со страницы при вызове API 100t * действия API транспортира, например getText()
, click()
, count()
и т. Д.
Так, когда вы определяете переменную для представления определенного элементана странице, когда Nodejs выполняет эту строку, транспортир не начинает поиск элемента со страницы:
// page object login.page.js
module.exports = function LoginPage(){
this.sumbitButton = element(by.css('#submit'));
this.countName = element.all(by.css('.username')).count();
}
// use page object in conf.js
var LoginPage = require('./login.page.js');
var loginPage = new Loginpage();
Когда Nodejs выполняет строку var loginPage = new Loginpage();
, все строки в функции LoginPage
будут выполнены.
Когда выполняется строка первая , транспортир не находит элемент с текущей открытой страницы,
Когда выполняется строка вторая , транспортир найдет элементс текущей открытой страницы, но в этот момент транспортир может запустить браузер с пустой страницей, целевая страница не была открыта или перемещена на.
Чтобы исправить вашу проблему, вам нужно определить randomFacility
как класс Method
, а не Property
:
module.exports = function() {
this.facilityList = element(by.name('facility')).all(by.tagName('option'));
this.randomFacility = function() {
return element(by.name('facility'))
.all(by.tagName('option')).count()
.then(function(numberOfItems) {
console.log('count: '+numberOfItems);
var rnum = parseInt(Math.random() * numberOfItems);
console.log('random index: '+rnum);
return rnum;
})
.then(function(randomNumber) {
console.log('argument randomNumber: '+randomNumber);
return element(by.name('facility'))
.all(by.tagName('option')).get(randomNumber)
});
}
};
// how to use
pageObject.randomFacility().then(function(ele){
return ele.click();
});