我使用的模式如下(虽然我正在寻求改进),
it('should update last refreshed text', () => {
cy.contains('selector-closest-to-text', 'signature text')
.then(els => {
const before = els[0].textContent; // #1 parse the text
expect(before.length).to.be.above(0); // #2 in case text is empty
cy.wait(1000) // #3 wait a second for new timestamp
cy.get('selector-for-refresh-trigger')... // #4 do something to refresh
cy.contains('selector-closest-to-text', 'signature text')
.should('not.contain', before) // #5 check has actually changed
.then(els=> {
const after = els[0].textContent; // #6 parse again
expect(after.length).to.be.above(0); // #7 in case empty
expect(before).not.to.eq(after); // #8 compare
})
});
});
注意事项:
#1 - 解析文本
在您的情况下,仅获取日期和时间有点棘手。如果您不打算测试其他用户是否更新了日程安排,您可以像我一样使用textcontent,但如果您只想要日期和时间,这个表达式可能会这样做
const before = els[0].textcontent.split(' ').slice(2).join(' ')
您可能想要提取的不仅仅是刷新时间,如果是这样,请在 it() 之外创建一个普通的 JS 函数
const parseText = (txt) => {
const split = txt.split(' ')
return {
user: split.slice(0,1),
role: split.slice(1,1),
timeRefreshed: split.slice(2).join(' '),
}
}
并像这样使用它
const user = parseText(els[0].textcontent).user
const role = parseText(els[0].textcontent).role
const before = parseText(els[0].textcontent).timeRefreshed
#3 - 等待刷新
这有点粗略但简单。可以通过等待文本更改来改进,should('not.contain', before) 可能就足够了。
注意cy.clock() 在这里可能行不通。
#4 - 触发刷新
我有一个按钮可以点击,但您可能需要输入一些文本,可能在另一个页面上,在这种情况下,此步骤将是多行。