angularベースのWebサイトにドロップダウンのオンとオフを切り替える設定があります。オフの場合、メインページに表示されません。
分度器では、スイッチがオフのときにこの要素が存在しないかどうかを確認する必要があります。ただし、多くのセットの中の1つのテストであるため、Element Not Foundエラーにスローされるべきではありません。どうすればいいですか?
私はやろうとしました:
expect($$('.switch').count()).to.equal(0).and.notify(next);
しかし、私はこれでAssertionErrorを取得しています...
私がドキュメントで見つけたものを使用して動作するものを得ました:
expect(element(by.css('.switch')).isPresent()).to.become(false).and.notify(next);
また、アサーションも使用するため、cucumberjsを壊しません。
私にとってもう少しうまく機能し、分度器の「方法」を使用する別のオプション 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('css')).isPresent()).toBeFalsy();
count()
を含むこれらの答えはどれも私にとってはうまくいきませんでした。
typeof $$( '。selector')。count()は
'object'
このようにcount
値を引き出すにはpromiseを使用する必要があります。
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()
})
})
これらの答えは、要素が消えるのを待ちません。それが消えるのを待つには、以下のようなExpectedConditionsを使用する必要があります。 InvisibilityOfは、要素がDOMを離れたかどうかを検出します。こちらのドキュメントをご覧ください: https://www.protractortest.org/#/api?view=ProtractorExpectedConditions 。
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
は良い方法かもしれません: 分度器-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();