Как запустить множественное утверждение в файле Nightwatch.js, используя объект страницы? - PullRequest
0 голосов
/ 23 января 2019

В моем тесте мне нужно проверить одинаковые строки текста на нескольких страницах. Я пытаюсь использовать утверждение Chai, но не могу запустить множественное утверждение .expept, используя объект страницы.

Если два утверждения .expect не пройдут тест с сообщением об ошибке Unknown property: "expect". Please consult docs at:http://nightwatchjs.org/api. когда я запускаю его только одной командой, он работает нормально.

// Test file code

module.exports = {

    'Copy Test': client => {
    client.url('https://www.testsite.com/')
    client.page.search().checkText()
    client.end();
   },
};
// Page object file code

let copyP = "Some test text"
let copyP2 = "Some text text 2"

module.exports = {
    elements: {
        p: 'CSS_selector',
        p2: 'CSS_selector',
    },

    commands: [{
        checkText: function() {
            return this 
            .expect.element('@p').text.to.equal( copyP, 'Text is ok')
            .expect.element('@p2').text.to.equal( copyP2, 'Text2 is ok')
        }
    }]
}

1 Ответ

0 голосов
/ 25 января 2019

Да, вы подробно описали правильное и желаемое поведение .

Утверждения Чая, встроенные утверждения Nightwatch или, в основном, любая другая библиотека утверждений, работают так же! Утверждения операторы взлома ( означает, что ваша программа должна завершить выполнение при возникновении ошибки / исключения ), с четкой областью и целью: оценка предиката .Два утверждения всегда будут независимы друг от друга.Таким образом, нет логического случая, когда нужно объединить два или более утверждений, а теперь?

По сути, утверждения не поддерживают функции обратного вызова, поэтому вы не можете передать результат одного в другое ( для них нет встроенной логики ).

Итак, вы не можете этого сделать ...

browser.click('@someElem')
       .expect.element('@otherElem').to.be.visible
       .expect.element('@otherElem').text.to.equal('I<3Turtles', 'text check');

Вы не можете сделать это ...

browser.click('@someElem')
       .expect.element('@otherElem').to.be.visible
       .setValue('@otherElem', 'I like turtles');

... и так как мы убрали их с пути, давайте посмотрим, как мы можем реорганизовать эту команду:

commands: [{
    checkText: function() {
        // Perform wrapper for extra safety! 
        this.api.perform((done) => {
            this.expect.element('@p').text.to.equal( copyP, 'Text is ok');
            this.expect.element('@p2').text.to.equal( copyP2, 'Text2 is ok');

            done();
        });
        return this;
    }
}]
...