检查 Protractor 中是否显示了 2 个元素中的 1 个

Check if 1 out of 2 elements isDisplayed in Protractor

在 Protractor 的测试中,我希望看到 element1element2 最后,我发现了一个 "solution" 只有在显示 element1 并且 element2不在页面上

expect(element1.isDisplayed() || element2.isDisplayed()).toBeTruthy();

如果 element1 不在页面上但 element2 在那里 - 我收到一个错误:

 Failed: No element found using locator: ...(element1 locator)

我不能在只有一种可能的期望的情况下编写测试,这是使用数据进行的测试,在我的情况下可能有 2 个结果。 我如何验证页面上是否显示了两个元素之一?

首先,检查 isDisplayed() 是否是您要使用的正确函数。

您的元素是否实际呈现但只是设置为隐藏,或者它甚至不在页面中?如果只是隐藏,那么用isDisplayed()就可以了。如果它不在页面中,那么您需要找到一种更好的方法来包装元素 .isDisplayed() 的检查,或者甚至找到更合适的函数。

发生的情况是,您的测试试图确定 element1.isDisplayed() 是真还是假,但它得到的是 'No element found using locator: element1'。比方说,如果您的定位器是 id='my-element-1',它只是意味着 webdriver 试图在您呈现的页面中找到一个 id 为 'my-element-1' 的元素,但什么也没找到,而通过使用 element1.isDisplayed() 您要求 webdriver 告诉你是否隐藏了 element1 可见性。

底线,isDisplayed returns a promise 并且你必须适当地处理它,否则一旦它 returns 出乎你的意料,你就会遇到麻烦。

我不认为Jasmine理解表达式element1.isDisplayed() || element2.isDisplayed(),所以即使两个元素不显示,断言仍然通过。

ExpectedConditions API 提供 and/or 操作。

var EC = protractor.ExpectedConditions;
var condition = EC.or(EC.visibilityOf(element1), EC.visibilityOf(element2));

expect(condition()).toBeTruthy();