如何从文本中提取数值,以及如何在赛普拉斯中将其转换为数字

how to extract numeric value out of text ,along with converting it into number in Cypress

提问人:Anil Tiwari 提问时间:6/30/2022 最后编辑:FodyAnil Tiwari 更新时间:7/21/2022 访问量:454

问:

嗨,伙计们,因为我是这个柏树和 UI 自动化的新手,我需要您的帮助来解决当前情况 我有一个这样的enter image description here网格,我在下面创建了一个代码,它作为参数并从 UI 读取,但它有很多用于填充的选项卡,因此我使用标签来到达特定的索引行custom commandsupport\commands.jsOrderIDFreight infonested divparents()

Cypress.Commands.add('readFreightInfo', (OrderID) => {
  return cy.get('.simple-table__cell:nth-child(1)')
    .contains(OrderID)
    .parents("div[role='row']")
    .find('div')
    .eq(2)
    .invoke('text')
})

但它返回的文本是“\n 65.88” 我需要什么 我只需要数字部分,即 299.88 英寸Number type

因为它是我之前使用的通用验证方法

cy.readFreightInfo(10250).should('eq', 65.83)

但现在我想断言它作为 should lies 的返回值custom commandbetween 60 and 70

到目前为止我尝试过什么

我已经尝试使用这个答案中提到的两种解决方法

我尝试过的解决方案链接

jquery 解析 赛普拉斯 cypress-custom-commands

评论

0赞 jjhelguero 6/30/2022
您的选择器似乎不正确。显示表格的 html 代码将有助于找到答案。

答:

0赞 Alapan Das 6/30/2022 #1

您可以从自定义命令返回值,如下所示:

Cypress.Commands.add('readFreightInfo', (OrderID) => {
  cy.get('.simple-table__cell:nth-child(1)')
    .contains(OrderID)
    .parents("div[role='row']")
    .find('div')
    .eq(2)
    .invoke('text')
    .then((text) => {
      return cy.wrap(+text.replaceAll('\n ', '')) //returns 65.83 as number
    })
})

然后在你的测试中,你可以这样做:

cy.readFreightInfo(10250).then((numValue) => {
  cy.wrap(numValue).should('eq', 65.83) //direct assert
  cy.wrap(numValue).should('be.gte', 60).and('be.lte', 70) //greater than equal to 60 and less than equal to 70
})
0赞 TesterDick 6/30/2022 #2

.trim()删除文本两端的行终止符。

另外,获取行的快捷方式 - 使用 ..contains('[role="row"]', OrderId)

Cypress.Commands.add('readFreightInfo', (OrderID) => {

  cy.contains('div[role="row"]', OrderID)
    .find('div')
    .eq(2)
    .invoke('text')
    .then(text => parseInt(text.trim()) )
})

cy.readFreightInfo(10250)
  .should('be.within', 60, 70)

引用 string.trim()

trim() 方法从字符串的两端删除空格并返回一个新字符串,而不修改原始字符串。在此上下文中,空格是所有空格字符(空格、制表符、不间断空格等)以及所有行终止符字符(LF、CR 等)。