2016-05-23 147 views
0

我有這段代碼,我想要通過頁面底部的所有可用鏈接。點擊它們後,我想確保打開的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

回答

0

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