В моем тесте мне нужно проверить одни и те же строки текста на нескольких страницах.
Я пытаюсь использовать утверждение 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')
}
}]
}
Да, вы указали правильное и желаемое поведение.
Chai's assertions, Nightwatch's built-in assertions, or mostly any other assertions library, work the same way! Assertions are breaking statements (meaning your program should end execution on one's failure/exception thrown), with a clear scope & purpose: evaluating a predicate. Two assertions will always be independent of one another. Thus, there's no logical case concern for chaining two, or more assertions, now is there?
По сути, утверждения не поддерживают функции обратного вызова, поэтому вы не можете передать результат одного другому (у них нет встроенной логики для этого).
Значит, ты не можешь этого сделать...
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;
}
}]
Ну да, есть что-то подобное, поддерживаемое Nightwatch. Если вам не нужен классический отказоустойчивый тип утверждений, то можете посмотреть на проверить утвержденияздесь. Они терпят неудачу как коллекция в конце теста, не нарушая программу и время выполнения. Надеюсь, поможет. Ваше здоровье!
Да, я на самом деле использовал эти утверждения, в частности .containsText()
, но я нашел с ним ошибку. Это не приведет к сбою, если в проверяемой вами копии отсутствует первая буква.
Это работает, спасибо @iamdanchiv за вашу помощь. Странно предполагать, что всем нужно будет запускать только одно утверждение за раз. На мой взгляд, было бы неплохо сделать утверждения ломкими или нет где-то в конфигурационном файле. Но должна быть веская причина, почему это работает именно так.