web-dev-qa-db-ja.com

要素が存在しないかどうかの分度器チェック

angularベースのWebサイトにドロップダウンのオンとオフを切り替える設定があります。オフの場合、メインページに表示されません。

分度器では、スイッチがオフのときにこの要素が存在しないかどうかを確認する必要があります。ただし、多くのセットの中の1つのテストであるため、Element Not Foundエラーにスローされるべきではありません。どうすればいいですか?

私はやろうとしました:

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

しかし、私はこれでAssertionErrorを取得しています...

28
Sakamoto Kazuma

私がドキュメントで見つけたものを使用して動作するものを得ました:

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

また、アサーションも使用するため、cucumberjsを壊しません。

23
Sakamoto Kazuma

私にとってもう少しうまく機能し、分度器の「方法」を使用する別のオプション 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);
});

(ローディングインジケータが消えたことを確認したかった)

30
Carl

これを行うことで動作しました:

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

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()
    })
})
3
activedecay

これらの答えは、要素が消えるのを待ちません。それが消えるのを待つには、以下のような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)
1
evanjmg

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();
0
Boris Yakubchik