如何在多个预期条件下验证是否有任何一个期望是真的

时间:2016-06-13 21:55:37

标签: javascript selenium automation protractor

我有一个场景,我在其中搜索文本字符串,它可能是返回结果中任何字段的一部分,它可能在标题中,或者返回的多个结果的摘要或描述中。我想写一个可以匹配这3个字段的测试,如果其中任何一个是真的,那么我的测试应该通过。

如何将多个期望条件与OR条件放在一起。

2 个答案:

答案 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.*")));