除了尝试捕获或承诺拒绝之外,有没有办法处理量角器的预期条件?
Posted
技术标签:
【中文标题】除了尝试捕获或承诺拒绝之外,有没有办法处理量角器的预期条件?【英文标题】:Is there a way to handle Protractor's Expected conditions when they're not met other than try catch or promise reject 【发布时间】:2021-07-01 08:26:32 【问题描述】:我正在使用量角器来自动化 Web 测试以及异步/等待模式。
假设我有一个元素,它只在我第一次单击特定切换时出现。
问题是,当它出现时,我想点击它。
有没有办法等待这个元素,如果它出现我点击它,如果没有,我点击别的东西然后继续我的操作而不使用 try/catch 块
它应该是这样的(请注意,这是假设的):
/*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.");
【问题讨论】:
我认为第一个 sn-p 看起来很合理。告诉我进展如何。 【参考方案1】: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...在你的情况下,它是任何一个条件
【讨论】:
以上是关于除了尝试捕获或承诺拒绝之外,有没有办法处理量角器的预期条件?的主要内容,如果未能解决你的问题,请参考以下文章