Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在量角器中访问节点列表元素的属性_Javascript_Html_Protractor_Nodelist - Fatal编程技术网

Javascript 如何在量角器中访问节点列表元素的属性

Javascript 如何在量角器中访问节点列表元素的属性,javascript,html,protractor,nodelist,Javascript,Html,Protractor,Nodelist,我正在尝试用量角器从一个相当大的HTML表中读取值(大约1000行5列)。 量角器的元素.all().getText()方法在这方面非常慢,因此我决定使用browser.executeScript实现一个直接读取值的解决方案,如: async getTextFromHtmlTable(){ try{ var rows = element.all(by.css('table[id^="P"] tr')); var numRows = await rows.c

我正在尝试用量角器从一个相当大的HTML表中读取值(大约1000行5列)。 量角器的元素.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)
    }; 
}
async getTextFromHtmlTable(){
试一试{
var rows=element.all(by.css('table[id^=“P”]tr');
var numRows=wait rows.count();
var arrRows=[];

对于(var i=2;i而言,节点列表似乎是通过
executeScript
方法作为webElements数组返回的,因此
getText()
应该可以工作。您也不需要使用
。然后()
当某些东西已经等待
时。您可以尝试下面的代码吗

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)
  }; 
}
async getTextFromHtmlTable(){
试一试{
var rows=element.all(by.css('table[id^=“P”]tr');
var numRows=wait rows.count();
var arrRows=[];

对于(var i=2;i我终于找到了解决方案,DublinDev告诉我executeScript不返回节点列表,这是正确的方向。因此我考虑在executeScript方法中处理节点列表,让它返回一个文本数组,而不是实际的节点列表:

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;" +
            "})();");
var arrRowsText=await browser.executeScript(“return(function(){”+
“var nodes=document.querySelectorAll(“+css+”);”+
“var arrayRes=[];”+

“对于(var j=0;jI尝试了您的建议,效果很好,但缺点是getText()非常慢,正如我所说的(检索1000行5列的文本大约需要7分钟),我想尝试一种不同的、更快的方法,而不是使用WebElements。因此,可能无法使用量角器访问HTML节点的属性?