1

私たちが使用しているテンプレートの奇妙な (そしてそれほどクールではない) 動作のため、分度器を使用したテストで立ち往生しています。

ページの読み込み時に、テンプレートには次のように 1 秒後に非表示になるオーバーレイがあります。

$(document).ready(function(config){
    setTimeout(function(){
       $('.page-loading-overlay').addClass('loaded');
       $('.load_circle_wrapper').addClass('loaded');
    },1000);
});

*それは私にはひどい気がします (これについてはコメントしたくありません)

とにかく、私のテストは 1 秒よりも速く実行され、このエラーがスローされるため、壊れてしまいます。

UnknownError: unknown error: Element is not clickable at point (463, 625). Other element would receive the click: <div class="page-loading-overlay loaded">...</div>

明らかにクリックを受け取るオーバーレイだからです。

テストでタイムアウトを設定する回避策を見つけましたが、これは私のスイートと CI/CD プロセスを本当に遅くします。そして、テストコードを乱雑にします。

コードは次のとおりです。

it('should test something', function(){
    setTimeout(function(){
        // test code
    }, 1000);
});

ステートメントの DOM から要素を削除し、beforeEachテストしたくないのでオーバーレイを完全に削除する方法があるかどうか疑問に思っていました。それが壊れても心配していません。

なにか提案を?

4

2 に答える 2

6

browser.executeScriptブラウザのコンテキストでいくつかのコードを実行するために使用できます。

beforeEach(function() {
  browser.executeScript("$('.page-loading-overlay').remove();");
});
于 2015-05-15T11:46:03.310 に答える
1

テスト中に DOM 構造の一部を削除することは良い考えではないと思います。タイムアウトを使用する代わりに、要素がクリック可能になるまで明示的に待機します。

var elm = element(by.id("myid"));
var EC = protractor.ExpectedConditions;

browser.wait(EC.elementToBeClickable(elm), 5000);
于 2015-05-15T10:56:01.160 に答える