首页 > 解决方案 > 如何取消 Selenium 中的特定等待?

问题描述

假设我需要等待某个结果,但也可能出现另一个结果,所以在这种情况下,我使用 2 个 wait(),但问题是如果在执行其中一个之后,我无法取消一个 wait()出现了

例子:

async waitForAction(): Promise<any> {
  try{
    await driver.wait(until.elementLocated(button)); // 1st wait
    await driver.wait(until.elementLocated(unexpectedErr)); // 2nd wait

    await driver.findElement(button).click()

   // how to cancel 2nd wait if 1st appeared 

  } catch(e) {
    console.log(e.message)
  }
}

标签: typescriptseleniumselenium-webdriverasync-await

解决方案


据我所知,您无法取消等待。一种解决方案是使用 OR 运算符组合button和定位器。unexpectedErr由于我们没有实际的定位器,我给你举个例子。假设button看起来像

<button id="submit">

CSS 选择器将是#submit. 假设unexpectedErr看起来像

<div class="error">...</div>

CSS 选择器将是div.error. CSS 选择器语法中的 OR 运算符是一个逗号,,因此组合定位器看起来像。

#submit, div.error

所以你的方法看起来像

async waitForAction(): Promise<any> {
  try{
    await driver.wait(until.elementLocated(comboLocator)); // combo wait

    await driver.findElement(button).click()
  } catch(e) {
    console.log(e.message)
  }
}

如果您使用的是 XPath,则 OR 运算符* 是一个竖线字符|,因此组合定位器看起来像

//button[@id='submit'] | //div[@class='error']

*PipeOR在 XPath 中并不是真正的运算符,但它会在此处完成您需要的操作。请参阅以下参考资料中与 XPath 相关的链接。

参考

CSS 选择器参考

XPath“或”运算符


推荐阅读