0

我正在尝试使用此代码查找元素加载所需的时间,但不起作用。

预期结果:总时间为 90 秒(或以毫秒为单位)

const start = cy.log(dayjs.format("HH:mm.ss.SSS));
const end = cy.log(dayjs.format("HH:mm.ss.SSS));

const diff = dayjs(end).unix() - dayjs(start).unix();
const timetaken = dayjs.utc(diff).format("HH.mm.ss.SSS");

cy.log(timetaken);
4

1 回答 1

1

.then()这有点棘手,因为赛普拉斯在命令队列中运行东西,你需要在回调中运行(大多数)dayjs 命令。

这是一个简单的例子

import dayjs from 'dayjs'

const duration = require('dayjs/plugin/duration')
dayjs.extend(duration)

it('times loading a site and selecting an element', () => {

  const start = dayjs();
  let end;

  cy.visit('http://example.com')
  cy.get('h1').then(() => {    
    // ensure end is set only after get command finishes
    // by using a .then()

    end = dayjs();   
    cy.log(`start: ${start.format("HH:mm.ss.SSS")}`)
    cy.log(`end: ${end.format("HH:mm.ss.SSS")}`)
    cy.log(`diff: ${dayjs.duration(end.diff(start)).$ms} ms` )
  })
})

如果您想在比较之前做更多的测试步骤,您可以使用赛普拉斯别名来保持开始和结束。

import dayjs from 'dayjs'

const duration = require('dayjs/plugin/duration')
dayjs.extend(duration)

it('times loading a site using aliases', () => {

  cy.wrap(dayjs()).as('start')

  cy.visit('http://example.com')
  cy.get('h1').then(() => {
    cy.wrap(dayjs()).as('end');    // must wrap "end" inside a .then()!
  })

  // other test stuff here

  cy.get('@start').then(start => {
    cy.get('@end').then(end => {
      cy.log(`start: ${start.format("HH:mm.ss.SSS")}`)
      cy.log(`end: ${end.format("HH:mm.ss.SSS")}`)
      cy.log(`diff: ${dayjs.duration(end.diff(start)).$ms} ms` )
    })
  })

})
于 2021-03-09T04:13:31.250 回答