2017-09-19 16 views
0

私の夜間テストでは、コールバックの値を私のassert文に渡したいと思います。しかし、私は解決策を見つけることができません。コールバック関数で宣言された変数のスコープを拡張する方法。 Nightwatch e2e test

const navCategoriesMen = function(client, subCat, assertUrl, catName){ client .url("") .waitForElementVisible('div.row.header-main-nav-content li.MEN') .moveToElement('div.row.header-main-nav-content li.MEN',0,0) .pause(3000) .elements('css selector',subCat, function(els){

  for(var i=1; i<=els.value.length; i++){ 
      var abc; 

      var catName= client.getText('li.MEN.open ul li li:nth-child(1) ul > a:nth-child('+i+')', function(res){ 
       abc = res.value; 
       console.log(abc); 

      }); 

      client 
      .click('li.MEN.open ul li li:nth-child(1) ul > a:nth-child('+i+')') 
      .waitForElementVisible('.banner-section.category-page-banner.banner-sec') 
      .assert.containsText('#facet-browse > div > div > ul > li.global-views-breadcrumb-item-active',abc) 

しかし、私は未定義の値として 'ABC' を取得しています。この擬似コードのような

答えて

1

もちろん、assert文は、コールバックの前に実行されるリターンが示しています

var abc; //undefined 
 

 
var catName = client.getText('li.MEN.open ul li li:nth-child(1) ul > a:nth-child(' + i + ')', //waiting for the answer 
 

 
//execute that inbetween 
 
client 
 
    .click('li.MEN.open ul li li:nth-child(1) ul > a:nth-child(' + i + ')') 
 
    .waitForElementVisible('.banner-section.category-page-banner.banner-sec') 
 
    .assert.containsText('#facet-browse > div > div > ul > li.global-views-breadcrumb-item-active', abc) //abc still undefined 
 
    
 
    //response from the getText, execute the call back 
 
    function(res) { 
 
    abc = res.value; 
 
    console.log(abc); 
 

 
});

あなたはリターンパターンを使用する必要があります(あなたが考えるかもしれES8非同期/ await)またはコールバックパターンを返しますが、コールバックから値を取得することはできません。何をすることはそれが可能だ場合、コールバック内で結果をテストして、次のように:

const navCategoriesMen = function(client, subCat, assertUrl, catName) { 
 
    client 
 
     .url("") 
 
     .waitForElementVisible('div.row.header-main-nav-content li.MEN') 
 
     .moveToElement('div.row.header-main-nav-content li.MEN', 0, 0) 
 
     .pause(3000) 
 
     .elements('css selector', subCat, function(els) { 
 

 
      for (var i = 1; i <= els.value.length; i++) { 
 
      var abc; // undefined 
 

 
      var catName = client.getText('li.MEN.open ul li li:nth-child(1) ul > a:nth-child(' + i + ')', function(res) { 
 
       abc = res.value; 
 
       console.log(abc); // something, I'm sure you know what 
 
       
 
       // abc has the good value, let's run the test 
 
       client 
 
       .click('li.MEN.open ul li li:nth-child(1) ul > a:nth-child(' + i + ')') 
 
       .waitForElementVisible('.banner-section.category-page-banner.banner-sec') 
 
       .assert.containsText('#facet-browse > div > div > ul > li.global-views-breadcrumb-item-active', abc) //abc = something 
 
      });

0

また、実行機能を

const navCategoriesMen = function(client, subCat, assertUrl, catName){ 
client 
    .url("") 
    .waitForElementVisible('div.row.header-main-nav-content li.MEN') 
    .moveToElement('div.row.header-main-nav-content li.MEN',0,0) 
    .pause(3000) 
    .elements('css selector',subCat, function(els){ 

    for(var i=1; i<=els.value.length; i++){ 
     var abc; 

     var catName= client.getText('li.MEN.open ul li li:nth-child(1) ul > a:nth-child('+i+')', function(res){ 
      abc = res.value; 
      console.log(abc); 

     }); 

     client 
     .click('li.MEN.open ul li li:nth-child(1) ul > a:nth-child('+i+')') 
     .waitForElementVisible('.banner-section.category-page-banner.banner-sec'); 
     client.perform(()=>{client.assert.containsText('#facet-browse > div > div > ul > li.global-views-breadcrumb-item-active',abc)}); 
を折り返すことができます
関連する問題