【问题标题】:How to access a variable which is updated inside the function in outer scope in Cypress/Javascript?如何访问在 Cypress/Javascript 外部范围内的函数内部更新的变量?
【发布时间】:2021-11-30 14:06:34
【问题描述】:

这是问题陈述。我正在尝试查找网页上的所有商品,并使用赛普拉斯找到价格最低的商品。问题是,只要我在内部函数中,minPrice 是正确的。但是,当我尝试在外部函数中打印 minPrice 时,minPrice 再次被分配给它的外部范围值。我对 JS 相当陌生,所以看起来我在这里缺少一些基本的 JS 概念。我尝试了很多东西,比如变量作用域、异步/等待(赛普拉斯声称它不需要),但没有成功。请帮忙!

下面是代码。

getMinPrice(){
//Initialize to a very big number
  var minPrice = 10000;
 
  cy.get('.btn.btn-primary').each(function ($el, index,$list) {

    //For each element, do some parsing to get the price for the item
    var textToParse = $el.attr('onclick');
    var price = textToParse.slice(-4,-1);
    price = parseInt(price,10);
    
   //compare price with current MinPrice
   if (price < minPrice)
          minPrice = price; 
  });
 
  cy.log(minPrice); // Logs 10000 which is not what I am expecting
}

【问题讨论】:

标签: javascript cypress


【解决方案1】:

这是因为 JS 异步工作,您的日志语句在 minPrice 的值更新之前运行。为了确保日志有更新的 minprice,我们可以使用then 来确保日志语句仅在每个语句执行完毕后才运行。

cy.get('.btn.btn-primary')
  .each(function ($el, index, $list) {
    //For each element, do some parsing to get the price for the item
    var textToParse = $el.attr('onclick')
    var price = textToParse.slice(-4, -1)
    price = parseInt(price, 10)

    //compare price with current MinPrice
    if (price < minPrice) minPrice = price
  })
  .then(() => {
    cy.log(minPrice) //should have the updated value
  })

【讨论】:

  • 非常感谢!这完全有道理。
  • 在此处跟进问题。我正在尝试将 minPrice 返回给调用函数,但赛普拉斯在将同步代码与异步代码混合时抛出了一堆错误。如何解决这个问题?我尝试链接另一个“then”,但没有帮助。
  • 我建议您为此创建一个单独的问题,因为这超出了此问题的范围。
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 2013-12-07
  • 2017-06-01
  • 2014-05-29
  • 2017-02-02
  • 2019-10-05
  • 2016-06-23
相关资源
最近更新 更多