1

私は分度器と一般的な約束にはかなり慣れていません。Promise を返すことや、キューに入れられたアクションの結果についての投稿はたくさんありますが、どれも私にはあまり意味がありません。簡単な質問です!

angularjs Web サイト用の分度器テストを作成しようとしています。

私は主にブートストラップと角度を使用しています。トースターやブートストラップモーダルなどの時折の角度アドオンを除いて、他のサードパーティのライブラリは使用していません。

テストのアサーション部分に到達する前に、いくつかの「配置手順」があります。まあ言ってみれば :

  • a) 人がログインする
  • b) ユーザーがオプション フォームにアクセスします (外部要因によって、画面に既に表示されている場合と表示されていない場合がありますが、存在しない場合は、ボタンを押して開くことができます)。
  • c) ユーザーがオプション フォームでアクションを実行します。
  • d) フォームのテキスト ボックスに正しい値が含まれていることを確認します。

フォームが既に画面に表示されている場合は、テストに簡単に合格できますが、最初にフォームがアクティブかどうかを確認し、アクティブでない場合はボタンをクリックする必要があるステップ b) で行き詰まります。ステップc。

私は次のように isDisplayed から約束を返そうとしました:

//
// Is the user settings form active at the mo?
//
function _isUserSettingsFormActive()
{
    var result = element(by.id(logoutFormID)).isDisplayed;
    return result;
}

しかし、_isUserSettingsFormActive() で .then を呼び出すと、次のエラーが発生します。

[31mTypeError: undefined is not a function[0m

ただし、_isUserSettinsFormActive() の結果を出力すると、以下が表示されるので、何かを返していることがわかります。

function () {
return self.elementArrayFinder_[fnName].
apply(self.elementArrayFinder_, arguments).toElementFinder_();
}

私がやりたいことは、アサートを実行する前にアイテムが存在するかどうかを確認し、それに基づいて行動することだけです。

このコードはテスト スーツ全体の多くの場所で使用されるため、関数内にある必要があります。それは「期待」そのものではなく、テストに合格するためにブラウザーをセットアップするためのアクションが必要な場合と必要でない場合があるステップです。

4

2 に答える 2

1

分度器は、Selenium の Java または C# バインディングのようには機能しません (より楽しいですが、Java または C# での単純なアクションを実現するには、より多くの作業が必要です)。options フォームも DOM にない場合は count promise を返す方が安全ですが、それが DOM にあり、単に非表示になっている場合は isDisplayed() を使用できます。条件に応じてボタンをクリックすることを含む、両方の状況について、以下に2つの例を書きました。

オプション 1 (DOM に存在せず、表示されない):

function _isUserSettingsFormActive() {
    //$$('#logoutFormId') is the equivalent of element.all(by.id('logoutFormId'))
    $$('#logoutFormId').count().then(function(num){
         if(num < 1) {
            element(by.id('openLogoutButton').click();
         }
    });
};

また

オプション 2 (DOM に存在するが表示されない):

function _isUserSettingsFormActive() {
    //$('#logoutFormId') is the equivalent of element(by.id('logoutFormId'))
    $('#logoutFormId').isDisplayed().then(function(visible){
         if(!visible) {
                element(by.id('openLogoutButton').click();
         }
    });
};
于 2016-07-19T13:56:51.320 に答える
1

isDisplayedは関数なので、次のように呼び出す必要があります。

function _isUserSettingsFormActive()
{
    var result = element(by.id(logoutFormID)).isDisplayed();
    return result;
}
于 2015-06-25T12:52:59.440 に答える