Определение объекта страницы транспортира не работает должным образом - PullRequest
0 голосов
/ 22 мая 2018

Я прошу прощения за немного расплывчатое название, я не уверен, как именно это сказать.

У меня есть объект Page Object, который, за одним исключением, работает отлично.Вот выдержка:

module.exports = function(){
this.facilityList = element(by.name('facility')).all(by.tagName('option'));
this.randomFacility = element(by.name('facility')).all(by.tagName('option')).count().then(function(numberOfItems) {
    var rnum = parseInt(Math.random() * numberOfItems);
    return rnum;
}).then(function(randomNumber) {
    element(by.name('facility')).all(by.tagName('option')).get(randomNumber)
});

}

Я могу получить доступ и использовать facilityList просто отлично.Но потом я понял, что почти всегда делаю одно и то же с facilityList, так почему бы мне просто не создать еще одну строку, чтобы она выбирала случайную.Поэтому я создаю randomFacility, используя код из основного файла conf.js.

Это не сработало.Я вижу отображаемую ошибку:

Failed: Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are undefined.  This could be either because this is a non-angular page or because your test involves client-side navigation, which can interfere with Protractor's bootstrapping.  See http://git.io/v4gXM for details"

Я в замешательстве.Это говорит о том, что я не могу выполнить всю эту обработку в объекте страницы, чтобы получить случайный объект, или мне просто нужно манипулировать с помощью objectList в файле conf.js и покончить с этим?

1 Ответ

0 голосов
/ 23 мая 2018

Вы должны знать механизм о том, как транспортир, чтобы найти элемент.Транспортир только для запуска поиска элемента со страницы при вызове 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();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...