2015-12-21 26 views
1

我需要使用一个变量,其值是基于CSS样式像素确定的。 测试找到左侧像素的值,然后选择特定的单元格。但是当我运行这个测试时,这个值总是为0而不是实际应该是的。在实习生功能测试中使用变量

'Test' : function() { 
      var left = 0; 
      var remote = this.remote; 
      return remote 
      .setFindTimeout(5000) 

      .findByXpath("//div[@class = 'grid']//div[@class = 'gridCell' and position() = 1]/div[3]") 
       .getAttribute("style") 
       .then(function(width) { 
        left = parseInt(width.substring(width.indexOf("left")+6,width.indexOf("width")-4)); 
       }).end() 
      .f_selectCell("", 0, left)    
     }, 

回答

1

尽管命令链中的调用将按顺序执行,但是在执行开始之前,链表达式本身会被解析并且参数被解析。所以在

return remote 
    .findByXpath('...') 
    .getAttribute('style') 
    .then(function (width) { 
     left = parseInt(width); 
    }) 
    .f_selectCell('', 0, left); 

的情况下,链不断开始执行前left参数f_selectCell进行评估。当leftthen回调被重新分配,f_selectCell是不会知道的,因为它已经评价left为0

相反,你需要调用一个then回调f_selectCell方法,或通过它是属性可以分配给的object

return remote 
    // ... 
    .then(function (width) { 
     left = parseInt(width); 
    }) 
    .then(function() { 
     // I'm not entirely sure where f_selectCell is coming from... 
     return f_selectCell('', 0, left); 
    }); 

// Put all args to selectCell in this 
var selectData = {}; 

return remote 
    // ... 
    .then(function (width) { 
     selectData.left = parseInt(width); 
    }) 
    // selectCell now takes an object with all args 
    // The object is never reassigned during execution. 
    .f_selectCell(selectData); 
相关问题