在其中一个测试中,我们需要声明存在3个元素中的一个。目前,我们正在使用protractor.promise.all()
和Array.reduce()
:
var title = element(by.id("title")),
summary = element(by.id("summary")),
description = element(by.id("description"));
protractor.promise.all([
title.isPresent(),
summary.isPresent(),
description.isPresent()
]).then(function (arrExists) {
expect(arrExists.reduce(function(a,b) { return a || b; })).toBe(true);
});
是否有更好的方法使用 Jasmine 解决它而不明确解析承诺?我们需要一个自定义匹配器,还是可以通过内置匹配器来解决?
答案 0 :(得分:3)
您只需使用单个选择器获取所有元素,并断言计数优于零:
var title_summary_description = element.all(by.css("#title, #summary, #description"));
expect(title_summary_description.count()).toBeGreaterThan(0);
答案 1 :(得分:2)
检查一下:
let EC = protractor.ExpectedConditions;
let title = EC.visibilityOf($("#title")),
summary = EC.visibilityOf($("#summary")),
description = EC.visibilityOf($("#description"));
expect(EC.or(title, summary, description)() ).toBeTruthy('Title or summary or description should be visible on the page')
请注意,我正在执行ExpectedCondition返回的函数 - 所以我得到该函数的结果(Promise将被解析为boolean)而不是函数。
如果需要,可以使用.presenceOf().visibilityOf()
http://www.protractortest.org/#/api?view=ExpectedConditions.prototype.or