3

特定のロールでテスト ユーザーをログインさせるテスト ステップを Cucumber で構築しようとしています。私のアプローチは、サインアウトオプションがそこにあることを確認してクリックしてから、ログインを試みることです。問題は、promise 構造がログアウトが最初に発生することを保証していないことです。また、常に最初にログインしているとは限らないため、基本的にログアウトが発生するまで待ってから先に進む方法が必要です。

私のテストステップは次のようになります。

this.Given(/^I am logged in as a\/an "([^"]*)"$/, function(roleName, callback) {
  console.log('Starting login as ', roleName);
  var myBrowser = this.browser;
  this.browser
    .setViewportSize({width: 1000, height: 600})
    .url(url.resolve(process.env.HOST, '/'));

  this.browser
    .waitForVisible('#main_menu').then(function() {
      console.log('#main_menu is visible' );

      myBrowser.waitForVisible('#appSignOut').then(function() {
        console.log('Logging out now');
        myBrowser.click('#appSignOut');
      });

      myBrowser.waitForVisible('#appSignIn').then(function() {
        console.log('Logging in as ', roleName);
        myBrowser.click('#appSignIn');

        myBrowser.waitForVisible('#username').then(function() {
          myBrowser
            .setValue('#username', 'test' + roleName)
            .setValue('#password', 'test' + roleName)
            .leftClick('#signin')
            .call(callback);
        });
      });
    });
    console.log('Done logging in as ', roleName);
});

の後に止める方法はありmyBrowser.waitForVisible('#appSignOut')ますか?意図した使用法をすべて一緒に見逃しているだけですか?

アップデート

私は新しいアプローチを試みましたが、まだ機能していません:

this.Given(/^I am logged in as a\/an "([^"]*)"$/, function(roleName, callback) {
  var myBrowser = this.browser;
  this.browser
    .setViewportSize({width: 1000, height: 600})
    .url(url.resolve(process.env.HOST, '/'));

  this.browser
    .waitForVisible('#main_menu')
    .then(myBrowser.isVisible('#appSignOut').then(function(isVisible) {
      if (isVisible) {
        myBrowser.click('#appSignOut');
      }
    }))
    .then(myBrowser.waitForVisible('#appSignIn').then(function() {
      myBrowser
        .click('#appSignIn')
        .waitForVisible('#username')
        .setValue('#username', 'test' + roleName)
        .setValue('#password', 'test' + roleName)
        .leftClick('#signin');
    }))
    .call(callback);;
});

ここでのロジックは次のとおりです。

  1. #main_menu が表示されている場合 (ページが読み込まれている場合)
  2. 次に - #appSignOut が存在する場合は、それをクリックします
  3. 次に - #appSignIn が表示されるのを待ってから、ログインを完了します

私が得るエラーは次のとおりです。

[chimp] Detected an unhandledRejection.
[chimp][hooks] Reason:
[chimp][hooks] RuntimeError
[chimp][hooks] no such element

しかし、私はこれのどれもまったく機能していないと思います。ポップアップ ブラウザの動作が速すぎて、何が起こっているのかわかりません。また、cucumber.log からも、ブラウザが何をしているのかがわかりません。

4

2 に答える 2

0

ChimpJS を使用して、ログイン フォームを使用して Meteor アプリに自動的にログインする際に問題が発生しました。 http://webdriver.io/api/protocol/execute.htmlを使用して Meteor.loginWithPassword() ( ChimpJS のバージョンの WebDriverIO の同期的な性質のため、looshi が示唆するように .then()) を使用しないでください: http://docs.meteor.com/#/full/meteor_loginwithpassword

于 2015-12-10T00:11:19.180 に答える