18

通常、URLにユーザー名とパスワードを渡すことで、SeleniumによるHTTP基本認証が必要なサイトにログインできることを知っています。例:

selenium.open("http://myusername:myuserpassword@mydomain.com/mypath");

Firefox 2または3でSeleniumテストを実行しましたが、[認証が必要]ダイアログウィンドウが表示されますか?

更新:これはSeleniumの問題ではなく、Firefoxの問題のようです。FF内でURLを手動で入力すると認証ダイアログが表示されますが、OperaでURLを入力すると、認証ダイアログが表示されずにページが表示されます。

4

8 に答える 8

11

Druska の回答に貢献すると、Selenium 2 API を使用して同じ構成を行うことができます。

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.http.phishy-userpass-length", 255);
profile.setPreference("network.automatic-ntlm-auth.trusted-uris","yourDomain");
new FirefoxDriver(profile);

このアプローチはより簡単で、すべての開発者に Firefox の設定を変更するよう依頼する必要はありません。Firefox ドライバーでのみテストしました。

更新

何らかの理由で (おそらくhttps://stackoverflow.com/a/14348701/256245で説明されているもの)、上記の解決策は新しいバージョンの Firefox では機能しません。これが今私にとってうまくいくものです(Firefox 19.0.2でテスト済み):

  1. AutoAuth Firefox プラグインをインストールします。
  2. 認証が必要なサイトにアクセスします。ユーザー名とパスワードを入力し、資格情報を保存することを選択してください。
  3. AutoAuth インストール ファイルをハード ドライブに保存します。プラグイン ページで、[Firefox に追加] と [リンクを名前を付けて保存] を右クリックします。
  4. 次のように Firefox Web ドライバーをインスタンス化します。

    FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default");
    File pluginAutoAuth = new File("src/test/resources/autoauth-2.1-fx+fn.xpi");
    firefoxProfile.addExtension(pluginAutoAuth);
    return new FirefoxDriver(firefoxProfile);
    

プラグインのインストールを保存した正しいパスを使用して、pluginAutoAuth ファイルをインスタンス化してください。デフォルトのプロファイルの使用に慣れていない場合は、Firefox プロファイル マネージャーを使用して、テストに固有のプロファイルを作成できます。

この新しいソリューションへの参照: http://watirmelon.com/2012/06/27/automatic-firefox-authentication-when-using-selenium-webdriver-with-autoauth/

于 2012-03-09T19:09:21.200 に答える
10

Firefox と Internet Explorer のソリューションがあります。

Firefox の場合、about:configに移動して、長さ 255の整数のnetwork.http.phishy-userpass-lengthを作成する必要があります。これにより、ユーザー名とパスワードが 255 文字未満の場合、認証ボックスをポップアップしないように Firefox に指示します。http://user:pass@domain.comを使用して認証できるようになりました。

Internet Explorer の場合、レジストリを編集する必要があります。キーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLEで、DWORD 値iexplore.exeおよびexplorer.exeを作成し、それらの値が0であることを確認します。

NTLM 認証もオーバーライドする必要がありました。Firefox で HTTP 基本認証構文を使用して NTLM 認証を行うには、Firefox 構成文字列network.automatic-ntlm-auth.trusted-uris (最初の構成オプションを伴う) で使用されているドメインを指定するだけです。これは、レジストリ編集だけで IE で機能します。

于 2010-07-29T20:25:56.747 に答える
7

コンテキスト ルートの後にスラッシュを追加します。

それ以外の: selenium.open("http://myusername:myuserpassword@mydomain.com/mypath");

使用する: selenium.open("http://myusername:myuserpassword@mydomain.com/mypath/");

コンテキストルートの最後にスラッシュを追加することで、世界のすべての違いが生まれます。スラッシュがない場合、ポップアップが開き、スラッシュがあると期待どおりに認証されます。

これはセレンのバグなどではなく、Firefox の問題であることに注意してください。コマンドラインを使用して、自分で確認することもできます。

 C:\Program Files\Mozilla Firefox>firefox http://myusername:myuserpassword@mydomain.com/mypath/

私にとっては、ネットワークURIを設定しなくても機能します:

FirefoxProfile profile = new FirefoxProfile();
//profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "mydomain.com");
//profile.setPreference("network.negotiate-auth.trusteduris", "mydomain.com");

WebDriver driver = new FirefoxDriver(profile);

driver.navigate().to("http://myusername:myuserpassword@mydomain.com/mypath/");


バージョン
Firefox 19.0、
selenium-java 2.31.0

于 2013-03-04T15:05:29.567 に答える
5

FireFox ドライバーを使用している場合... FireFox プロファイルを作成し、ユーザー名/パスをパスワード マネージャーに保存し、アドオンを使用して自動ログインすることができます。Selenium で FireFox または Chrome ドライバーを作成する場合は、デフォルトで匿名プロファイルが使用されることに注意してください。したがって、通常の拡張機能/アドオン/その他は使用されません。そのため、配布してソース管理に保存できるプロファイルを作成しないことをお勧めします。

1) Windows で、実行/スタート メニューから「firefox.exe -p」と入力して、プロファイル マネージャーを起動し、カスタム プロファイル マネージャーを作成して、コードの残りの場所に保存します。

2) 起動時に確認しないにチェックを入れる

3) AutoAuth アドオンをダウンロードします https://addons.mozilla.org/en-US/firefox/addon/autoauth/

4) HTTP 基本認証が必要なサイトにアクセスし、資格情報を保存します。

次にサイトにアクセスすると、認証が必要なプロンプトが表示されることなく、AutoAuth によってログインされます。

NTLM を使用している場合は、構成設定を変更してホスト名を含めることができます: network.automatic-ntlm-auth.trusted-uris

于 2011-11-14T13:02:34.397 に答える
2

次のようにヘッダーを直接操作してみてください。

最初に開始するときは、Seleniumtiがヘッダーを操作できるようにする必要があります。

selenium.start("addCustomRequestHeader=true");

次に、次のような基本的なエンコーディングとヘッダー操作を使用する必要があります。

    String authHeader = "";
    try {
    BASE64Encoder coder = new BASE64Encoder();
    authHeader = coder.encode("developers:Str492ight".getBytes());
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    setUpSelenium();
    startSelenium();
    selenium.addCustomRequestHeader("Authorization", "Basic " + authHeader);
    selenium.open("/");
    selenium.waitForPageToLoad("10000");

Basicの後のスペースが必要です。これは、基本HTTP認証ヘッダーがどのように見えるかです。

さらに、いくつかのHttp Watcherを使用して、リクエストに認証リクエストが含まれているかどうかを確認できます。

Wiresharkを使用するか、FiddlerまたはCharlesProxyの方が適しています。

お役に立てば幸いです。ぎこちなく。

于 2010-06-11T09:23:19.050 に答える
0

前述のとおり、addCustomRequestHeader ソリューションはプロキシ インジェクション モードでのみ機能します。しかし、それを実装しようとしたとき、そのプロキシ インジェクション モードに関連する他の問題に遭遇しました。

Java クライアントを使用しているときにプロキシ インジェクションがまったく機能するかどうかは、私にはわかりません。open() を呼び出すたびに、「this.onXhrStateChange.bind は関数ではありません」という奇妙なエラーが発生しました。私が見つけた唯一の解決策は、値が「true」の追加パラメーターを open() メソッドに追加する必要があることを暗示していましたが、Java クライアント API は単一のパラメーターしか受け入れません。

そのため、上記で説明したブラウザー構成ソリューションで解決する必要がありましたが、それらはベンダーのサポート意欲に依存しているため、あまり快適ではありません。

テストを Selenium 2 (現時点ではまだアルファ版) に移植することはより良い見通しかもしれませんが、私の場合、Selenium Grid が Selenium 2 をサポートするまでは不可能です。

誰にも役立つことを願っています、セバスチャン

于 2010-08-11T16:15:28.540 に答える
0

Sikuli スクリプトを使用して、この Firefox 認証ポップアップを Windows および Linux 環境で処理できます。

  • Windows/Linux で Sikuli をダウンロードしてセットアップする (依存関係をインストールする必要があります)
  • 次の Sikuli スクリプトを使用してポップアップを処理します。Authentilcat1.png はポップアップ画像で、100 個のポップアップを処理します。

for i in range (100): while exists(Pattern("Authentlcatl.png").similar(0.99)): print("Found Authentication Popup") wait(2) type("admin" + Key.TAB) type("admin" + Key.ENTER)

  • 次のコードを使用して、Java コードから Sikuli スクリプトをトリガーおよび終了します。

Sikuli スクリプトをトリガーするには:

String[] lincmd = { "bash", "-c", "sudo java -jar Sikuli-X/Sikuli-IDE/sikuli-script.jar Sikuli-X/Sikuli-IDE/new1.sikuli/" };

java.lang.Runtime.getRuntime().exec(lincmd);

Sikuli スクリプトを終了するには:

String[] lincmd = { "bash", "-c", "sudo kill $(ps aux | grep '[s]ikuli' | awk '{print $2}')" };

java.lang.Runtime.getRuntime().exec(lincmd);

  • Java コードから Sikuli スクリプトをトリガーした後、Sikuli スクリプトは別のプロセスとして個別に実行されるため、最後に Java コードで Sikuli スクリプトを終了します。

  • そのため、ポップアップが画面に表示されるたびに、Sikuli スクリプトが処理します。

于 2014-03-25T08:14:39.330 に答える
0

Firefox 17 の 'username:password' (RFC1738) 処理は、Firefox ではデフォルトで許可されていません (以前は機能していました)。ただし、次の方法で再度有効にできることがわかりました。

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("network.negotiate-auth.trusteduris", hostname);
driver = new FirefoxDriver(profile);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
selenium = new WebDriverBackedSelenium(driver, "http:// + username + ":"
    + password + "@"
    + hostname + ":" + port + baseUrl);

Selenium 2.28.0、Firefox 17 で動作します。DigestAuth ログインに使用されます。

于 2013-01-15T23:15:10.187 に答える