아쉽게도 nightwatch는 약속이나 일반적인 비동기를 잘 지원하지 않습니다. 블로그 게시물 here에는 몇 가지 문제점이 요약되어 있습니다.
다행히도 browser.elements
과 browser.perform
의 조합을 사용하는 것이 가능합니다.
var assert = require('assert');
module.exports = {
'foobar': function (browser) {
var isTextFound = false;
browser
.url('http://localhost:3000')
.waitForElementVisible('body', 1000);
browser.elements('css selector', '.myclass', function (res) {
res.value.forEach(function (jsonWebElement) {
var jsonWebElementId = jsonWebElement.ELEMENT;
browser.elementIdText(jsonWebElementId, function (jsonElement) {
var text = jsonElement.value;
if (text.indexOf('text1') !== -1 && text.indexOf('second_text') !== -1) {
isTextFound = true;
}
});
});
});
browser.perform(function() {
assert.ok(isTextFound, 'Text found');
});
browser.end();
}
}
는 nightwatch는 DOM 요소에서 작동 어썰트 따라서 당신은 부울을 주장 할 수 없기 때문에 필요의 키 포인트
require('assert')
이 중 일부를 통해 가자. 이것은 또한 어설 션이 보고서에 나타나지 않을 것이라는 것을 의미합니다. 그러나 이것이 틀리면 오류가 발생하고 이것이 발생합니다. 주장은 이후에 일어날 수 있도록
browser.perform(function(){...})
이 명령 큐에 주장을 넣습니다. 이것이 없으면 즉시 평가가 수행되고 어설 션은 실패합니다.
browser.elements('css selector, '.myclass', function(res){...})
이
은
elements api을 사용하고 있습니다. webdriver 프로토콜 섹션의 API는 웹 요소를 직접 반환하지 않지만 웹 요소 (WebElement JSON 개체)의 Serenium 표현을 반환하므로
elementIdText
과 같은 특수 메서드를 사용하여 정보를 가져와야합니다.