【问题标题】:Test if each element contains an element with protractor测试每个元素是否包含带量角器的元素
【发布时间】:2015-11-04 23:59:38
【问题描述】:

我想测试每个元素.elem1 是否包含一个元素.elem2。试过了,但似乎没有按预期工作:

expect(element.all(by.css('.elem1')).all(by.css('.elem2')).isDisplayed()).toBeTruthy();

【问题讨论】:

    标签: javascript angularjs selenium testing protractor


    【解决方案1】:

    您如何比较 elem1 元素的数量与内部具有 elem2 元素的 elem1 元素的数量:

    var elem1count = element.all(by.xpath("//*[contains(@class, 'elem1')]")).count();
    var elem1WithElem2count = element.all(by.xpath("//*[contains(@class, 'elem1') and .//*[contains(@class, 'elem2')]]")).count();
    elem1WithElem2count.then(function (elem1WithElem2count) {
        expect(elem1count).toEqual(elem1WithElem2count);
    });
    

    是的,那有点丑。

    类似的想法,但使用filter():

    var elem1count = element.all(by.css(".elem1")).count();
    var elem1WithElem2count = element.all(by.css(".elem1")).filter(function (elem1) {
        return elem1.element(by.css('.elem2')).isPresent();
    }).count();
    
    elem1WithElem2count.then(function (elem1WithElem2count) {
        expect(elem1count).toEqual(elem1WithElem2count);
    });
    

    或者,你可以用reduce()解决它:

    var result = element.all(by.css('.elem1')).reduce(function(acc, elem1) {
        return elem1.element(by.css('.elem2')).isPresent().then(function (isPresent) {
            return acc && isPresent;
        });
    }, false);
    expect(result).toBe(true);
    

    在这里,对于每个 elem1 元素,我们得到一个布尔变量,指示是否存在 elem2 元素,然后将所有布尔值简化为一个布尔值。

    您也可以使用each() 并对每个elem1 进行expect 检查:

    element.all(by.css('.elem1')).each(function(elem1) {
        expect(elem1.element(by.css('.elem2')).isPresent()).toBe(true);
    });
    

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      相关资源
      最近更新 更多