8

私はcucumberjsに問題があります。指定されたセレクターを持つ要素が DOM に表示されるようにする方法が見つかりません。Chaiでcucumberjsを使用しています。 https://github.com/cucumber/cucumber-js isPresent は、要素が存在するかどうかに関係なく、オブジェクトを返します。問題は、要素がDOMに存在するかどうかを確認する方法です。

質問を編集して、学んだ教訓を共有します。Nathan Thompson のおかげでドキュメントも読みました。isPresent() は、要素がページに存在するかどうかを解決する promise を返します。

http://angular.github.io/protractor/#/api?view=Protractor.prototype.isElementPresent

コード例は少し誤解を招きます。したがって、特定のセレクターを持つ要素がDOMに存在するかどうかを期待したい場合は、次のようなものを使用する必要があります:

element(by.id('someId')).isPresent().then(function(isElementVisible) {
     expect(isElementVisible).to.be.true;   
});

または、約束でチャイを使用します。

expect(element.isPresent()).to.eventually.be.false

しかし、「やがて」という言葉は不快に聞こえます。最終的には確実ではありません。:)

この質問に関する記事は、私の個人的なブログで見ることができます。

4

2 に答える 2

10

分度器のほぼすべての関数は、実際にテストしたい値に解決される promise を返します。したがって、次のようなことをしようとしているだけの場合は、によって返される promise オブジェクトに対してアサートしているため、常に失敗しますisPresent

expect(element.isPresent()).to.be.false

このような状況に対処するには、Chai のchai-as-promisedプラグインを使用することをお勧めします。eventuallyPromise を解決し、結果の値をアサートするチェーンを提供します。上記の例は次のようになります。

expect(element.isPresent()).to.eventually.be.false
于 2015-06-11T20:06:26.347 に答える