2

JUnitを使用してSelenium2Webdriverテストを実装しようとしています。SeleniumHQ.orgとWebのドキュメントは、Selenium RCとWebdriverの間を行き来しているように見えるため、混乱を招きます。さらに、私のJavaはそれほど強力ではありません。数年前に受講しましたが、あまり使用していません。ヘッドレスCIサーバーからJUnitテストを実行し、Webdriverを使用してリモートクライアントシステムでFirefoxを実行したいと考えています。

収集したものから、次のコードを使用して、ローカルシステムでFirefoxのWebドライバー制御のインスタンスを開くことができます。私がテストしているWebサイトには信頼できないSSL/TLS証明書があるため、Firefoxドライバーに信頼できない証明書を受け入れるように指示する必要があります。これはローカルでうまく機能します:

FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);  // NOTE: this is the default behavior
RemoteWebDriver driver = new FirefoxDriver(profile);
Selenium selenium = new WebDriverBackedSelenium(driver, baseurl);

しかし、Webdriverを使用してリモートシステムでこれを行う方法がわかりません。2つのアプローチは完全に互換性がないようです。上記のコードは、Webdriverをリモートで使用するために使用している次のコードにはまったく適合しません。

Selenium selenium = new DefaultSelenium(host, port, browser, baseurl);
selenium.start();

今、私はリモートテストシステムでカスタムFirefoxプロファイルを操作するのに何時間も費やしました。2012年の夏に動作しましたが、最近のOSとブラウザの更新後、動作を停止しました。Firefoxドライバープロファイルを作成し、setAcceptUntrustedCertificates(true)を呼び出す方がはるかに良いようです。Webdriverを使用して、リモートシステム上のブラウザーでテストを実行し、ブラウザーに信頼できないSSL / TLS証明書を無視させることは可能ですか?

4

3 に答える 3

2

質問で述べたように、信頼できない証明書を明示的に受け入れるためのプロパティを設定する必要はありません。デフォルトでは、webdriverは信頼できない証明書を受け入れます。Webドライバーでバックアップされたセレンを使用するのではなく、次のようにリモートWebドライバーを直接使用する必要があります。

Webdriver wd = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox());

http://localhost:4444/wd/hubテストを実行するために送信するハブのURLは次のとおりです。テストを開始すると、ハブはFirefox機能に登録されているリモートノードを探します。

個人的には、seleniumhq.orgではなくhttp://code.google.com/p/selenium/wiki/Grid2のドキュメントを読むことをお勧めします。私の知る限り、Seleniumチームはseleniumhqのドキュメントを更新しようとしています。あなたもそれに貢献することができます:)

于 2013-01-10T04:24:06.457 に答える
2

まず第一に、プロファイルのためだけに webdriver でサポートされたセレンを使用している場合は、webdriver に固執することをお勧めします。ローカル マシンで使用するプロファイルを次のように定義できます。

   File file = new File("firebug-1.8.1.xpi");
   FirefoxProfile firefoxProfile = new FirefoxProfile();
   firefoxProfile.addExtension(file);
   firefoxProfile.setPreference("extensions.firebug.currentVersion", "1.8.1"); 
   WebDriver driver = new FirefoxDriver(firefoxProfile);

あなたの質問に答えるには:サイモン・スチュワートのソリューションをここから引用します:

 FirefoxProfile profile = new FirefoxProfile(); 
 profile.setAcceptUntrustedCertificates(true); 
 DesiredCapabilities caps = DesiredCapabilities.firefox(); 
 caps.setCapability(FirefoxDriver.PROFILE, profile);

このプロファイルを使用して、リモート ドライバーを作成します。

これが機能しない場合は、バグ (または少なくとも機能要求) を書き留めることができます。

編集後:すぐに利用できる証明書発行サイトがないため、このソリューションを実際にテストすることはできません。だからある意味では、本当の姿を知るためにあなたのフィードバックをお待ちしています... :)

于 2013-01-10T07:03:30.313 に答える
-1

この質問をしたとき、Selenium オブジェクトと WebDriver オブジェクトの違いがわかりませんでした。特に Selenium 2 の「WebDriver」機能について学ぼうとしていたにもかかわらず、愚かにも、Selenium 2 オブジェクトを使用して「Selenium 2 Webdriver」プロジェクトを作成できると考えました。これらのツールを使用した経験のある人にとっては当然のことのように聞こえるかもしれませんが、「Selenium 2」の本やプロジェクトのドキュメントを読んだ後でも、その違いははっきりとはわかりませんでした。

その結果、テストがリモートサーバーで実行されることを期待して、Selenium オブジェクトをインスタンス化して Web ページを調べる Java コードを作成し、Selenium オブジェクトに WebDriver オブジェクトを渡そうとしました。

今ではより明確に見えます: Selenium と WebDriver プロジェクトは (混乱を招くように) Selenium 2.0 という名前の新しい包括的なプロジェクトに統合されましたが、それらは Selenium 2 内の明確で別個のツールです。既存の Selenium オブジェクトを WebDriver オブジェクトに変換します。2 つのツール間に有用な相互作用はないようです。

たとえば、私のプロジェクトには次のコードがありました。ローカル デスクトップ システムの Web ブラウザで問題なく動作しました。

Selenium selenium = new DefaultSelenium(host, port, browser, baseurl);

selenium.get(urlPath);

selenium.type(username_field, username);
selenium.type(password_field, password);
selenium.click(login_button);

しかし、デスクトップ システムではなく、ヘッドレスの継続的インテグレーション サーバーでそのテストを実行できるようにしたいと考えています。Selenium オブジェクトの代わりに WebDriver オブジェクトを使用するようにコードを変換しました。現在、Selenium Grid 2 サーバーに接続されたリモート システムで実行されます。

WebDriver driver = new RemoteWebDriver(new URL("http://10.0.0.29:4444/wd/hub"), capability);

driver.get(urlPath);

driver.findElement(By.name(username_field)).sendKeys(username);
driver.findElement(By.name(password_field)).sendKeys(password);
driver.findElement(By.className(login_button)).submit();

Selenium 2 で WebDriver を使用する方法を学びたい他の人が、Selenium オブジェクトが WebDriver の一部であると考えて、Selenium オブジェクトについて読んだときほど多くの時間を無駄にしないことを願っています。私の現在の [n00b] アドバイスは、Selenium オブジェクトに言及するものはすべて無視し、WebDriver オブジェクトについてできる限り多くのことを調べることに純粋に集中することです。開始するのに適した場所は、SeleniumHQ.org の WebDriver ドキュメントです。

AJ が彼の回答で示唆したように、Selenium Grid のドキュメントもご覧ください。

PS: リモートの Selenium 2 Webdriver インスタンスは、デフォルトで、信頼されていない SSL/TLS 証明書を自動的に受け入れます。コードは必要ありません。

于 2013-01-11T17:36:37.063 に答える