我在我的基于Angular的网站中有一个设置,可以打开或关闭下拉菜单。如果关闭,则不会在主页面上显示。
使用Protractor,我需要检查在开关关闭时此元素是否不存在。然而,在一组多个测试中,我不应该被抛出“元素未找到”的错误。我该如何做?
我尝试过:
expect($$('.switch').count()).to.equal(0).and.notify(next);
但是我在这里遇到了一个断言错误...
我在我的基于Angular的网站中有一个设置,可以打开或关闭下拉菜单。如果关闭,则不会在主页面上显示。
使用Protractor,我需要检查在开关关闭时此元素是否不存在。然而,在一组多个测试中,我不应该被抛出“元素未找到”的错误。我该如何做?
我尝试过:
expect($$('.switch').count()).to.equal(0).and.notify(next);
但是我在这里遇到了一个断言错误...
对我来说稍微更好一些的选项,是使用 protractor 的“方式”完成操作 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);
});
(我想确认加载指示器已经消失)
通过在文档中发现的某些内容,我成功地使这件事情工作起来了:
expect(element(by.css('.switch')).isPresent()).to.become(false).and.notify(next);
还使用了断言,因此不会破坏cucumberjs。
我通过以下方法使其工作:
expect(element(by.css('css')).isPresent()).toBeFalsy();
我尝试了一些包含 count()
的方法,但都不起作用;
$$('.selector').count()
的类型是'object'
你需要使用promise来获取 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()
})
})
export const invisibilityOf = (el) =>
browser.wait(ExpectedConditions.invisibilityOf(el) as any, 12000,
'Element taking too long to disappear in the DOM')
const el = element(by.css(arg1))
return invisibilityOf(el)
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();
let dropdownSwitch = config.switch
expect(await $('dropdown css').isPresent()).toBe(dropdownSwitch);
这将涵盖它在开启或关闭时的验证