除非存在文本,否则赛普拉斯刷新页面?

Doc*_*Who 5 javascript cypress

我正在尝试编写一个测试,但我已经到了需要等待一些文本变得可见的地步。

基本上到目前为止,我已经上传了一个文件,然后导航到另一个页面,这个新页面只显示“正在处理..”,当文件完成检查时,它会显示“成功!”

问题是这个页面并不是每 x 秒调用一次 API 来更新文本,它只是在页面加载时执行一次,所以我想检查页面是否显示“正在处理..”,再次调用 cy.reload() 检查,调用 cy.wait(1000) 重新加载并再次检查等,直到页面显示“成功!”。

我的问题是如何检查文本是否存在而不是断言并且测试失败?

小智 4

这已经被问过几次了,简短的答案是使用 jQuery,例如

cy.visit(...)
cy.wait(1000)  // in case the page is initially slow to load

const text = Cypress.$('div').text();
if (text.trim().startsWith('Processing') {
  cy.wait(1000)
  cy.reload()
}
Run Code Online (Sandbox Code Playgroud)

这会让你重新加载一次,但我猜你想重复这一过程直到“成功...”,对此递归似乎是重复操作直到出现正确的 DOM 的唯一方法。

function waitForText(attempt = 0) {

  if (attempt > 100) {   // choose cutoff point, must have this limiter
    throw 'Failed'
  }

  cy.wait(1000);
  const text = Cypress.$('div').text();
  if (text.trim().startsWith('Processing') {
    cy.reload();
    waitForText(attempt + 1) 
  }
}

cy.visit(...)
waitForText()
Run Code Online (Sandbox Code Playgroud)