【问题标题】:NodeJs retrieving value from Array show as unNodeJs 从数组中检索值显示为 un
【发布时间】:2017-01-08 17:54:35
【问题描述】:

cellsData 在全局变量中有如下数组

 [   { id: 2,
    cellId: 'R2C3',
    row: '2',
    col: '3',
    value: '202',
    rawValue: '202.0',
    numValue: '$202' },
  { id: 3,
    cellId: 'R2C4',
    row: '2',
    col: '4',
    value: '2034',
    rawValue: '2034.0',
    numValue: '$2,034' }]

我有一个苏打脚本,我想在从这个数组读取数据后验证数据 问题是它在cellsData[startRowId].numValue 上给出错误,因为,27 undefined

我也试过global.cellsData,但没有工作

错误

.keyYears table tbody tr:nth-child('+i+') td:nth-child(3)',''+ cellsData[startRowI ^

TypeError:无法读取未定义的属性“27”

    var browser = soda.createClient({
    .....
    });

// Retrieving data from Excel sheet    
testsheet.setAuth( 'user', 'pass', function(err){

if (err) console.log(err);

testsheet.getCells( 1, function(err, cellsObj){

    if (err) console.log(err);   

    cellsData = cellsObj.cells;
    rowcount = cellsObj.RowCount;
});

})


browser 
    .chain
    .session()  
    .setSpeed(speed)
    .setTimeout(2000)
    .open('/')
    .and(login('dev@dev.com', 'x1212GQsdtpS'))
    .and(verifyData())
    .end(function(err){
        console.log('error');

    });

function login(user, pass) {
  return function(browser) {
    browser
    .click('css=a#loginButton')
    .type('css=input.input-medium.email',user)
    .type('css=input.input.pwd',pass)
    .clickAndWait('css=a.btn.login')
    .assertTextPresent('Clients',function(){ console.log('logged in ok')})
  }
}


function verifyData() {
            var startRowId=27
    console.log('inside TestingSpreaddsheet')
    var totalLoop=(rowcount-5)+1
  return function(browser) {
    browser
    for (var i = 1; i <= 4; i++) {
    browser.assertText('css=div.keyYears table tbody tr:nth-child('+i+') td:nth-child(3)',''+ cellsData[startRowId].numValue +'',function(){ console.log('looks good')})
    .assertText('css=div.keyYears table tbody tr:nth-child('+i+') td:nth-child(5)',''+ cellsData[startRowId].numValue +'')
    .assertText('css=div.keyYears table tbody tr:nth-child('+i+') td:nth-child(6)',''+ cellsData[startRowId].numValue +'')
    .assertText('css=div.keyYears table tbody tr:nth-child('+i+') td:nth-child(7)',''+ cellsData[startRowId].numValue +'')

    }
  }
}

更新 Soda 在获取我的 ExcelSheet 数据之前正在运行该链。如何控制链条?

【问题讨论】:

  • celldata 还是cellsdata
  • 这是我在帖子中纠正的错字,但问题有所不同
  • 它抛出错误,因为我试图在定义之前访问单元格数据......如何在 nodejs 中处理它?
  • 尝试用一个虚拟值初始化它,例如用空字符串或数组初始化。但在实际使用之前,请务必检查 undefined 值。见stackoverflow.com/questions/858181/…
  • 但是如何在剩余链执行之前获取 cellsData 的值呢?我已经尝试在函数本身中移动从 Excel 单元中检索数据的逻辑,而不是首先执行它正在解析其余数据

标签: node.js selenium soda


【解决方案1】:

在节点中,大多数事情都是异步的,而不是同步的。数据尚未到达,因此休息过程中断。

代码中我拥有数据的唯一位置是在 testsheet 函数中,所以我将测试代码移到那里并解决了这个问题。

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2023-03-27
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多