亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何訪問量角器中 NodeList 元素的屬性

如何訪問量角器中 NodeList 元素的屬性

神不在的星期二 2022-09-02 20:55:15
我正在嘗試從量角器中相當大的HTML表中讀取值(大約一千行和5列)。Protractor的element.all().getText()方法在這方面非常慢,所以我決定使用browser.executeScript實現一個解決方案來直接讀取值,例如: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 + "')").then(function(elements){                var arrayRes = [];                for (var j=0; j<elements.length; j++){                    console.log("****** Element text: " + elements[j].textContent);                    arrayRes.push(elements[j].textContent);                    }                return arrayRes;            });            arrRows.push(arrRowsText.join(';').replace(/;\s/gm, ";"));        }        return arrRows;     }catch(err){        console.log ('Some error: ' + err)    }; }但是,執行測試時的控制臺輸出為:處理行:569****** 元素文本:未定義的****** 元素文本:未定義的 ****** 元素文本:未定義的****** 元素文本:未定義的****** 元素文本:未定義的******** 處理行:570****** 元素文本:未定義的****** 元素文本:未定義的****** 元素文本:未定義的****** 元素文本:未定義的****** 元素文本:未定義的 ****** 元素文本:未定義的 ****** 元素文本:未定義的 ****** 元素文本:未定義的無論我閱讀什么屬性(textContent,innerText,innerHTML...),它總是返回“undefined”。我做錯了什么嗎?感謝您的幫助!
查看完整描述

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()更快地讀取。


查看完整回答
反對 回復 2022-09-02
?
犯罪嫌疑人X

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)

  }; 

}


查看完整回答
反對 回復 2022-09-02
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號