2

Javascript、webdriverio (v2.1.2) を使用して、内部サイトからデータを抽出しています。内部サイトは SSO 対応なので、別のアプリケーションで認証されている場合は、このアプリケーションにログインする必要はありません (企業のイントラネット アプリケーションでは一般的です)。私は以下を達成する予定です、

  • 必要な機能を持つクライアントを作成する
  • 必要な URL を渡す
  • お楽しみに : ページのタイトルを印刷する
  • ページに要素が存在するかどうかを確認します。はいの場合、それはログインページです。そうでない場合、それはログインページではありません

    login = function (username, password) {
    if (!browserClientUtil) {
        throw "Unable to load browserClientUtil.js";
    }
    browserClientUtil
      .createClient()
      .url(_Url)
      .title(function (err, res) {
            console.log('Title is: ' + res.value);
      }) .isExisting('input#login_button.login_button', function (err, isExisting) {
        browserClientUtil.getCurrentClient()
            .setValue('input#USER.input', username)
          .setValue('input#PASSWORD.input', password)
          //.saveScreenshot('ultimatixLoginDetails.png')
          .click('input#login_button.login_button')
          .pause(100);
          handlePostLogin();
    });
    

    };

これが最善の方法ですか?ログインページを検証するためのコードを別の関数に分離しようとしましたが、webdriver のすべてがコールバックの一部として発生し、正しい方法で実行しているかどうかわかりません。 その関数によって返される最終的な値になるコールバックから戻るにはどうすればよいですか?

    login = function (username, password) {
    if (!browserClientUtil) {
        throw "Unable to load browserClientUtil.js";
    }
    browserClientUtil
      .createClient()
      .url(_Url)
      .title(function (err, res) {
            console.log('Title is: ' + res.value);
      });
      if(isThisLoginPage()){
            browserClientUtil.getCurrentClient()
            .setValue('input#USER.input', username)
          .setValue('input#PASSWORD.input', password)
          //.saveScreenshot('ultimatixLoginDetails.png')
          .click('input#login_button.login_button')
          .pause(100);
          handlePostLogin();
        }
};

    isThisLoginPage = function() {
    var client = browserClientUtil.getCurrentClient();
    if(!client) {
        throw "Unable to get reference for current client, hence cannot validate if this is login page.";
    }

    client.isExisting('input#login_button.login_button', function (err, isExisting) {
        if(isExisting) {
            return true;
        }
    });
    return false;
};
4

1 に答える 1

6

他のコマンドをラップする独自のコマンドを作成することで、独自のワークフローを作成できます。たとえば、ログインするための独自のコマンドを作成できます。

browserClientUtil.addCommand("login", function(url, user, pw, cb) {
    this.url(url)
        .setValue('#username', user)
        .setValue('#password', pw)
        .submitForm('#loginForm')
        .call(cb);
});

これにより、「複雑な」非同期 Web ドライバー アクションを単純な関数の背後に隠すことができます。強力なツールチェーンを簡単に作成できます。最後に、テスト スクリプトは次のようになります。

browserClientUtil
    .login("http://example.com/login", "john.doe", "testpass")
    .getTitle(function(err, title) {
        console.log(title);
    })
    // ...

乾杯

于 2014-08-29T22:38:50.903 に答える