Javascript 在typescript中使用cypress在try/catch中始终返回false

Javascript 在typescript中使用cypress在try/catch中始终返回false,javascript,typescript,cypress,Javascript,Typescript,Cypress,从那时起,发送值的标准方式是什么?我有下面的代码,该函数总是返回false,即使我调试了isExist变量当前为true。我假设它与异步/同步问题有关,但我不知道在函数中使用try-catch和return-value的方式是什么 function isExist(selector: string): boolean{ let isExist =false try { cy.xpath(`count(//*[@class="${selector}"])`).t

从那时起,发送值的标准方式是什么?我有下面的代码,该函数总是返回false,即使我调试了isExist变量当前为true。我假设它与异步/同步问题有关,但我不知道在函数中使用try-catch和return-value的方式是什么

function isExist(selector: string): boolean{
  let isExist =false
  try {
    cy.xpath(`count(//*[@class="${selector}"])`).then((count) => {
      isExist = !!count;
    });
  } catch (error) {
    cy.log(`${selector} is not found`);
  }
  return isExist;
}
你需要等待承诺才能使用try/catch。下面是一个如何使用try/catch处理已解决或已拒绝承诺的错误的示例-这两种情况都返回一个值:

函数存在{ 返回新的PromiseSolve,拒绝=>{ 设置超时=>{ 常数rand=Math.floorMath.random*10;
rand您可以将xpath结果转换为承诺

函数DoeSistSelector:string:Promise{ 返回新的Cypress.PromiseSolve=>{ 返回cy.xpath`count/*[@class=${selector}]`。然后count=>resolve!!count } } 它“测试元素是否存在”,异步=>{ const exists=wait doe性别歧视'my-selector'; ... }; Try/catch是不必要的,因为xpath“count”从不失败。如果元素不存在,则返回0


再次重申,正如您在上一个问题中所指出的,Cypress测试的这种方法是一种代码气味。

不要使用try/catch?而是将其放在测试框中,然后这是否回答了您的问题?这是否回答了您的问题?我必须使用try/catch,因为选择器不能保证是正确的valid@jacobcan118那不是真的。try/catch在默认情况下不起作用承诺。您需要使用async/await.cy.xpath可能不是真正的承诺,但可能是一个表。但是,这不会影响您的答案。在我的情况下,我必须使用try/catch来处理类似于无效xpath的情况,因为选择器可能无效否,请考虑一下-如果选择器无效,xpathcount将只返回0-它将为not抛出一个错误。嗯……但是我在运行时遇到了一个错误,无法对“文档”执行“评估”:字符串“count/*[@class=[class=selector]]'不是有效的XPath表达式。这是因为双引号太多,只是语法不正确。作为选择器传入的是什么?您只需要类名。yap…但这是我的用例,我必须处理无效的选择器,有时选择器参数已经作为有效选择器传入