循环无法正常工作 - 夜班

问题描述:

我有这段代码,我想要通过页面底部的所有可用链接。点击它们后,我想确保打开的URL是正确的。 我认为递归调用完成得太早。另一个问题是我怎么做才能知道该链接属于某个URL。循环无法正常工作 - 夜班

function links(browser, total_links) { 
    if (total_links <= 0) { 
     browser.end(); 
     return; 
    } 

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

     browser 
      .waitForElementVisible('.bottom .socal>span:nth-child(' + total_links + ')', 1000, function() { 

      console.log('Flag2'); 
      browser.execute('scrollIntoView(alignToBottom)') 

      .moveToElement('.bottom .socal>span:nth-child(' + total_links + ')', 3, 3) 
       .pause(3000) 
       .click('.bottom .socal>span:nth-child(' + total_links + ') a', function() { 
        console.log('Flag3'); 
        browser.keys(['\uE006']) 
        // .assert.urlContains('facebook') 
        //.assert.urlEquals('https://www.facebook.com/unitel.ao/?fref=ts') 
          .window_handles(function (result) { 
          console.log('Flag4'); 
          browser.assert.equal(result.value.length, 2, 'There should be two windows open.'); 
          var handle_1 = result.value[0]; 
          var handle_2 = result.value[1]; 
          browser.switchWindow(handle_2, function() { 
           browser.closeWindow() 
            .switchWindow(handle_1, function() { 
             total_links = total_links - 1; 
             links(browser, total_links); 
            }); 
          }); 
         }); 

        console.log('Flag5'); 
       }); 
      console.log('Flag6'); 
     }); 
} 

module.exports = { 
    'Social links': function (browser) { 
     var total_links; 

     browser 
      .url('http://m.unitel.ao/fit/') 
      .execute(function() { 
        return document.querySelectorAll("ul.navbar-nav>li").length; 
       }, 
       function (tags) { 
        total_links = tags.value; 
        links(browser, total_links); 

       }); 

     // .end(); 
    } 
}; 
+0

遗憾地说太多的代码,并在澄清的问题没有关联。 – nullpointer

Humh,好像你被困这个天ago.I推荐页面对象,它会帮助你远离硬编码,更容易改变CSS的未来。

主页对象(home.js)可能是这样的:

module.exports = { 
    url: function() { 
    return 'http://m.unitel.ao/fit/'; 
    }, 
    commands: [{ 
    getUrl: function(n) { 
     if (n === 3) { 
     return 'youtube.com/user/tvUNITEL'; 
     } 
     if (n === 1) { 
     return 'facebook.com/unitel.ao/?fref=ts'; 
     } 
     if (n === 2) { 
     return 'instagram.com/unitelangola/'; 
     } 
     if (n === 4) { 
     return 'plus.google.com/110849312028181626033/posts'; 
     } 
    } 
    }], 
    elements: { 
    facebook: { 
     selector: '.bottom .socal>span:nth-child(1)', 
    }, 
    instagram: { 
     selector: '.bottom .socal>span:nth-child(2)' 
    }, 
    youtube: { 
     selector: '.bottom .socal>span:nth-child(3)' 
    }, 
    googleplus: { 
     selector: '.bottom .socal>span:nth-child(4)' 
    } 
    } 
}; 

并在测试应该是这样的:

module.exports = { 
    'Social links': function(browser) { 
    const homePage = browser.page.home(); 
    var j = 0; 
    for (var i in homePage.elements) { 
     homePage 
     .navigate() 
     .waitForElementVisible(homePage.elements[i].selector, 5000, false, 
      function() { 
      browser.pause(3000); 
      }) 
     .click(homePage.elements[i].selector, function() { 
      browser 
      .pause(2000) 
      .window_handles(function(result) { 
       url = homePage.getUrl(j + 1); 
       var home = result.value[0]; 
       var handle = result.value[1]; 
       browser 
       .switchWindow(handle) 
       .verify.urlContains(url) 
       .closeWindow() 
       .switchWindow(home); 
       j += 1; 
      }); 
     }) 
    } 
    } 
}; 

PS:如果你不知道如何创建一个页面对象,这里是文档http://nightwatchjs.org/guide#using-page-objects

在配置文件中
Nightwatch.js

"src_folders" : ["tests"], 
    "output_folder" : "reports", 
    "custom_commands_path" : "", 
    "custom_assertions_path" : "", 
    "page_objects_path" : "./lib/pages", /* you need to add the path,e.g: './lib/pages', */ 
    "globals_path" : "", 
+0

你说得对,我已经用了几天的时间了......谢谢你的帮忙。我有疑问,页面对象不能与硒webdriver运行?得到这个错误:“错误从硒服务器检索新的会话” – Rita

+0

我编辑了答案,检查它 –

+0

它工作感谢!我可以为动态链接创建页面对象吗?我的意思是,当我不知道有多少点击链接以及点击哪些链接时,有没有办法做到这一点?再次感谢您的帮助 – Rita