2 回答

TA貢獻1784條經驗 獲得超7個贊
我終于找到了解決這個問題的方法,DublinDev為我指出了正確的方向,他說expertScript不返回NodeLists。因此,我考慮在 executeScript 方法中處理 NodeList,并讓它返回一個文本數組,而不是實際的 NodeList:
var arrRowsText = await browser.executeScript("return (function(){" +
"var nodes = document.querySelectorAll('" + css + "');" +
"var arrayRes = [];" +
"for (var j=0; j<nodes.length; j++){" +
" arrayRes.push(nodes[j].innerText);" +
"}" +
"return arrayRes;" +
"})();");
現在它就像一個魅力,元素文本使用innerText比使用getText()更快地讀取。

TA貢獻2080條經驗 獲得超4個贊
節點列表似乎通過該方法作為 webElements 數組返回,因此應該可以正常工作。當某些東西已經被編輯時,你也不需要使用。你能試試下面的代碼嗎?executeScriptgetText().then()await
async getTextFromHtmlTable(){
try{
var rows = element.all(by.css('table[id^="P"] tr'));
var numRows = await rows.count();
var arrRows = [];
for (var i = 2; i <= numRows; i++){
console.log("********Processing row: " + i);
var css = 'table[id^=\"P\"] tr:nth-child(' + i + ') td div div';
//**Slow solution: var arrRowsText = await element.all(by.css(css)).getText();
//Faster:
var arrRowsText = await browser.executeScript("return document.querySelectorAll('" + css + "')");
let allEleText = [];
for(let j = 0; j < arrRowsText.length; j++){
allEleText.push(await arrRowsText[j].getText());
}
arrRows.push(allEleText.join(';').replace(/;\s/gm, ";"));
}
return arrRows;
}catch(err){
console.log ('Some error: ' + err)
};
}
添加回答
舉報