1

ユースケース: ユーザー名でログインし、第 2 要素認証ページに移動して多くのことの 1 つを実行し (知識ベースの質問に回答するなど)、最終ページに移動してパスワードを入力します。ブラウザーを閉じて、ユーザー名で再度ログインを試みます。今回は、アプリが Cookie を認識し、ユーザーがパスワードを直接入力するように求められるため、2 要素認証ページがバイパスされます。

問題: Selenium RemoteWebDriver を使用してこれらのテストを別のテスト マシンで実行しています。最初のブラウザーを閉じて RemoteWebDriver の新しいインスタンスを開くと、Cookie とキャッシュがクリアされて起動し、毎回 2 要素認証ページが表示されます。ログインを試みます。

必要なもの: Cookie やキャッシュを自動的にクリアせずに RemoteWebDriver の新しいインスタンスを作成する方法を理解するのを手伝ってください。これにより、2 要素認証ページがバイパスされます。これは、IE、Chrome、Firefox、および Safari で必要です。

これを明示的にクリアするコードはありませんが、強制的にクリアしないようにするコードもありません (それが存在する場合でも)。何を試すか。

バージョン: Selenium WebDriver: 2.45.0.0、Selenium Grid: 2.45.0

ありがとう!

4

1 に答える 1

1

Firefox で Cookie を保存するには; カスタム プロファイルを作成し (例についてはこちらを参照)、新しい RemoteWebDriver インスタンスを開始するたびにそれを使用します。そうすれば、Firefox はセッション間で既存のすべての Cookie と同じプロファイルを再利用します。ただし、これはテスト自体で受け取った Cookie を保存しません。解決策については、以下の代替アプローチを参照してください。

同様のアプローチが Chrome- linkでも機能します。

カスタム プロファイルではなく Internet Explorer の場合、ensureCleanSession 機能を false に設定して、セッション開始リンクでの Cookie の消去を防ぐ必要があります。

別の解決策: Cookie は、テスト自体から操作することもできます。

  1. テストが終了したら、すべての Cookie を取得します。

    ReadOnlyCollection<Cookie> cookies = driver.Manage().Cookies.AllCookies;

  2. それらをどこかに保管してください。その方法は自動化のセットアップによって異なりますが、通常はディスクへの単純なシリアル化で問題なく動作するはずです。

  3. テストの開始時に Cookie をシリアル化解除し、WebDriver を介して追加します。

    foreach (var cookie in cookies) driver.Manage().Cookies.AddCookie(cookie);

于 2015-03-20T22:49:01.647 に答える