typescript - 如何取消 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)
}
}
解决方案
据我所知,您无法取消等待。一种解决方案是使用 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 相关的链接。
参考
推荐阅读
- amazon-web-services - 使用 Postman 删除 DynamoDB 中的项目,获取“缺少所需参数 Id”
- python-3.x - 数据库未在 python 中显示
- java - 在同一方法中调用方法名称?
- python - 将列表拆分为 N 个子列表,总和大致相等
- html - 元素应该在换行符上时移动到 Div 的右侧
- python - 如何从列表中删除列表
- python - 无法为我的 pygame 创建多个敌人
- javascript - 如何以角度从字典对象中排除匹配值?
- java - 我怎样才能给玩家一个随机块?谢谢!(Minecraft Forge 改装 1.15)
- python - 在表达式中迭代序列的子序列(块)