ElementFinder.getText()
在元素上調用innerHTML
並刪除前導和尾隨空格,但innerHTML
還包括任何級別的嵌套的所有子元素。 DOM中沒有特殊屬性只能獲得第一級文本,但可以自行實施。 DOM中的文本也是一個節點,存儲在DOM樹中,就像任何標籤元素一樣,它只是具有不同的類型和屬性集合。我們可以得到屬性爲Element.childNodes
的所有類型元素的第一級子元素,然後迭代它們並僅保留文本節點,然後連接它們的內容並返回結果。
在量角器中,我決定添加一個自定義方法到ElementFinder
的原型,使其易於使用,所以任何量角器元素都可以擁有它。這取決於你在哪裏放置這個擴展代碼,但我建議將它包括在測試前的某個位置,也許在protractor.conf.js。
protractor.ElementFinder.prototype.getTextContent = function() {
// inject script on the page
return this.ptor_.executeScript(function() {
// note: this is not a Protractor scope
// current element
var el = arguments[0];
var text = '';
for (var i = 0, l = el.childNodes.length; i < l; i++) {
// get text only from text nodes
if (el.childNodes[i].nodeType === Node.TEXT_NODE) {
text += el.childNodes[i].nodeValue;
}
}
// if you want to exclude leading and trailing whitespace
text = text.trim();
return text; // the final result, Promise resolves with this value
}, this.getWebElement()); // pass current element to script
};
該方法將返回一個無極,其與text
變量的值中來解決。如何使用它:
var el = $('.desc');
expect(el.getTextContent()).toContain('Print this');
// or
el.getTextContent().then(function (textContent) {
console.log(textContent); // 'Print this'
});
很酷!這解決了這個問題。謝謝@邁克爾。 –