我有一个场景,我在其中搜索文本字符串,它可能是返回结果中任何字段的一部分,它可能在标题中,或者返回的多个结果的摘要或描述中。我想写一个可以匹配这3个字段的测试,如果其中任何一个是真的,那么我的测试应该通过。
如何将多个期望条件与OR条件放在一起。
答案 0 :(得分:2)
您可以使用protractor.promise.all()
解决问题:
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);
});
如果存在3个字段中的至少一个,则此测试将通过。
如果您专门询问等待要显示的其中一个元素,可以使用protractor.ExpectedConditions.or()
:
var title = element(by.id("title")),
summary = element(by.id("summary")),
description = element(by.id("description"));
browser.wait(EC.or(
EC.presenceOf(title),
EC.presenceOf(summary),
EC.presenceOf(description)), 5000);
答案 1 :(得分:1)
在Java中,我们可以使用OR,如下所示
String expected="cool"; //this is my expected value
String actual1="cool"; //get title from driver
String actual2="xyz"; //get summary from driver
String actual3="abc"; //get required text from driver
Assert.assertTrue((expected.equals(actual1)) | (expected.equals(actual2)) | (expected.equals(actual3)));
如果您正在寻找在标题或摘要的句子中检查特定单词,以下方式将有所帮助。
String actual1="its very cool"; //get title from driver
String actual2="xyz"; //get summary from driver
String actual3="abcd"; //get required text from driver
//here i am checking for cool
Assert.assertTrue((actual1.matches(".*cool.*")) | (actual2.matches(".*cool.*")) | (actual3.matches(".*cool.*")));