微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

除了 try catch 或 promise reject 之外,有没有办法处理量角器的预期条件

如何解决除了 try catch 或 promise reject 之外,有没有办法处理量角器的预期条件

我正在使用量角器和 async/await 模式自动执行 Web 测试。

假设我有一个元素仅在我第一次单击特定切换时出现。

问题是,当它出现时,我想点击它。

有没有办法等待这个元素,如果出现我点击它,如果没有,我点击其他东西然后继续我的操作而不使用 try/catch 块

Si 应该是这样的(请注意,这是假设的):

/*This will click on the toggle that might trigger the extra element to appear*/
await this.toggle.click()
const isExtraElementPresent = await browser.wait(ExpectedConditions.presenceOf(extraElement),2000);
if (isExtraElementPresent ){
    await extraElement.click();
}

我现在正在做的是:

await this.toggle.click();
try {
    await this.extraElement.click();
    }
catch (error) {
    await console.log("Extra element didn't appear.");
    }

解决方法

try/catch 是处理这种情况的唯一方法。

try {
  // wait for the element
} catch (error) {
  // do whatever if the element is not present
}

但是,你应该考虑避免它,原因如下

你的逻辑如下

  • 登录
  • 等待可能不存在的元素 2 秒
  • 尝试点击

您的第二个项目在大多数登录尝试中需要 2 秒,通常情况下几乎是 browser.sleep

应该遵循的正确模式是这样的

var EC = protractor.ExpectedConditions;
var welcomeMessagePresent = EC.presenceOf(welcomeMessageElement);
var firstLoginPopupPresent = EC.presenceOf(firstLoginPopup);
// Waits for either condition
await browser.wait(
  EC.or(welcomeMessagePresent,firstLoginPopupPresent),5000,'neither condition satisfied'
);

所以它会等待条件之一。并且可以有任意数量的条件 - 1,2,3 ...在您的情况下,它是条件之一

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?