量角器检查元素是否不存在

时间:2014-08-14 17:26:23

标签: javascript angularjs protractor chai

我在基于角度的网站上有一个设置,可以打开和关闭下拉列表。如果它关闭,则它不会显示在主页面上。

使用量角器时,我需要检查开关关闭时是否存在此元素。但是,我不应该被抛入Element Not Found Error,因为它是一组中的一个测试。我该怎么做?

我试过这样做:

expect($$('.switch').count()).to.equal(0).and.notify(next);

但是我得到了一个AssertionError ...

6 个答案:

答案 0 :(得分:30)

另一种对我有用的选择,并使用量角器“做事”的方式http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.all

element.all(by.css('.k-loading-image')).then(function(items) {
    expect(items.length).toBe(0);
});

(我想检查装载指示灯是否消失了)

答案 1 :(得分:23)

通过使用我在文档中找到的东西来完成工作:

expect(element(by.css('.switch')).isPresent()).to.become(false).and.notify(next);

还使用断言,因此它不会破坏cucumberjs。

答案 2 :(得分:5)

我通过这样做得到了它:

expect(element(by.css('css')).isPresent()).toBeFalsy();

答案 3 :(得分:3)

包括count()在内的所有答案都不适用于我;

  

typeof $$('。selector')。count()是'object'

您必须使用承诺将count值拉出来。

const nameSelector = '[data-automation="name-input"]';
const nameInputIsDisplayed = () => {
    return $$(nameSelector).count()
        .then(count => count !== 0)
}
it('should not be displayed', () => {
    nameInputIsDisplayed().then(isDisplayed => {
        expect(isDisplayed).toBeFalsy()
    })
})

答案 4 :(得分:1)

如果你的开关是在配置中定义的,你可以这样做

let dropdownSwitch = config.switch

expect(await $('dropdown css').isPresent()).toBe(dropdownSwitch);

这将涵盖它在两种情况下的验证,当它打开或关闭时

答案 5 :(得分:0)

stalenessOf可能是一个很好的方式:Protractor - ExpectedConditions.stalenessOf

例如,您有一个当前打开的模态。你关闭它并期望它不存在:

element(by.css('.modal-dialog .cancel-button')).click();
browser.wait(EC.stalenessOf(element(by.css('.modal-dialog')), 60000);
expect(element(by.css('.modal-dialog')).isPresent()).toBeFalsy();