2016-06-09 2 views
0

Я запускаю этот тест с ночным кошмаром, и у меня есть петля внутри цикла, первая работает нормально, но она не проходит внутри второго цикла. я написал console.log и возвращается:Второй цикл не работает

Number of links:[object Object] 

Это мой код: как там причина, не входящих в петле 2? Спасибо заранее.

.execute(
      function() { 
       return document.querySelectorAll('.menuElementsAgregator>li').length 
      }, 
      function(result) { 
       total_links = result.value; 
       console.log("Number of main links:" + total_links); 
       for (var i = 2; i <= total_links; i++) { 
        (function (i) { 
         browser.waitForElementPresent('.menuElementsAgregator', 3000) 
          .click('.menuElementsAgregator>li:nth-child(' + i + ')>a') 
          .waitForElementVisible('.menuElementsAgregator>li:nth-child(' + i + ')', 2000) 
         .execute(
           function() { 
            return document.querySelectorAll('.menuElementsAgregator>li:nth-of-type(' + i + ')>.tsr-nav-second-level .has-sub .clickableTabWithLink').length 
           }, 
            function(result) { 
            total_links2 = result.value; 
            console.log("Number of links:" + total_links2); 
           for (var j = 2; j <= total_links2 + 1; j++) { 
            browser.waitUntilElementIsClickable('.menuElementsAgregator>li:nth-child(' + i + ')') 
              .click('.menuElementsAgregator>li:nth-child(' + i + ')') 
              .waitForElementPresent('.menuElementsAgregator>li:nth-of-type(' + i + ')>.tsr-nav-second-level>li:nth-of-type(' + j + ').has-sub', 5000) 
              .click(' .menuElementsAgregator>li:nth-of-type(' + i + ')>.tsr-nav-second-level>li:nth-of-type(' + j + ').has-sub .clickableTabWithLink:first-child') 
              .pause(1000) 
              .waitForElementVisible('.games-list', 5000); 
                             } 
           } 
          ) 
        })(i); 
       } 
      }) 
+0

что вы называете этой функцией? Важно знать, что вы используете в аргументе 'result2' – sahilkmr78

ответ

0

Проблема в том, что total_links не является целым, а является объектом.

Попробуйте заменить

console.log("Number of main links:"+ total_links); 

с

console.log("Number of main links:", total_links); 

Это покажет вам, что внутри total_links. Если вы не можете исправить это, добавьте комментарий с содержанием total_links

+0

console.log (« Количество основных ссылок: », total_links); Он не работал – Rita

+0

try 'console.log (total_links)' –

+0

не работает ни – Rita

0

Абсолютно этот код не работает, потому что вы не можете использовать обратный вызов в таком цикле, ваш индекс «i» во втором цикле будет равен ' total_links.length 'все время. Вы можете попробовать это:

 .execute(
     function() { 
     return document.querySelectorAll('.menuElementsAgregator>li').length 
     }, 
     function(result) { 
     total_links = result.value; 
     console.log("Number of main links:" + total_links); 
     for (var i = 2; i <= total_links; i++) { 
     (function(i){ // this is a closure 
      browser.waitForElementPresent('.menuElementsAgregator', 3000) 
      .click('.menuElementsAgregator>li:nth-child(' + i + ')>a') 
      .waitForElementVisible('.menuElementsAgregator>li:nth-child(' + i + ')', 2000) 
      .execute(
       function() { 
       return document.querySelectorAll('.menuElementsAgregator>li:nth-child(' + i + ')>.tsr-nav-second-level>.has-sub').length 
       }, 
       function(result2) { 
       total_links2 = result2.value; 
       console.log("Number of links:" + total_links2); 
       for (var j = 0; j <= total_links2; j++) {// i = total_link.length already, before get in to this loop. 
        browser.waitForElementPresent('.menuElementsAgregator>li:nth-child(' + i + ')>.tsr-nav-second-level>.has-sub:nth(' + j + ')', 3000) 
        .click('.menuElementsAgregator>li:nth-child(' + i + ')>.tsr-nav-second-level>.has-sub:nth(' + j + ')>a') 
        .pause(3000) 
        .waitForElementVisible('.games-list', 5000); 
       } 
       } 
      ) 
      })(i) // close 
     } 
     } 
    ) 

Вы должны взглянуть на апи .Запустите(), это будет помогать много для такого рода работы. Это сделало мой код более чистым и удобочитаемым. Ps: Потратьте некоторое время на исследование закрытия.

+0

Извините за поздний ответ, но только сегодня я вернулся к этой проблеме. Пробовал ваше предложение, но все еще получал 'Number links: [object Object]' – Rita

+0

за то, что я могу понять '.waitForElementVisible ('. MenuElementsAgregator> li: nth-child (' + i + ')', 2000)' does not accept аргумент 'i'. Я посмотрел на api.perform(), но мне было не очень понятно – Rita

+0

Не могли бы вы дать мне руку на это, все еще придерживающийся этого кода. Все работает, кроме основной, передавая значение 'i' в эту часть кода:' .execute (function() { return document.querySelectorAll ('. MenuElementsAgregator> li: nth-of-type (' + i + ')>. tsr-nav-second-level .has-sub .clickableTabWithLink'). length }, потому что, если я вручную поместил номер, остальная часть кода запускает – Rita

Смежные вопросы