web-dev-qa-db-ja.com

Selenium IDEの代わりにWebDriverを使用するのはなぜですか?

すべてのテストケースをSelenium IDEに記録し、それをJava/WebDriverにエクスポートして、WebDriver with Eclipseで実行できないのはなぜですか?

WebDriverの使用に非常に混乱しているため、明確な説明が必要です。

そして、誰もがIDE記録されたスクリプトがWebDriverで失敗する理由を説明できますか?

40
Sagar

すべてのテストケースをIDEに記録し、Java/webdriverにエクスポートしてwebdriverで実行するだけではいけない理由

すばらしい質問です。答えは次のとおりです。

Selenium IDEは非常に使いやすい記録再生ツールですが、非常に信頼性が低くなります。通常、Webアプリケーションでは記録と再生は嫌われます。Webアプリケーションは頻繁に変更されるため、 IDEは、メンテナンスの悪夢が発生する可能性があるため、実稼働環境には理想的なソリューションではありません。

実用的な例を挙げましょう。テストを記録すると、動的IDを持つ要素が見つかります。もちろん、Eclipseにインポートできますが、そのテストが途中で失敗した場合はどうなりますか?そもそもテストをアジャイルで独立したものにして、これらを最初にキャッチしないようにしましょう。

また、テスト自動化の原則に要約します。私の意見ではテスト自動化(および他のいくつかの専門家)は、テスト自動化はプログラミングの観点からアプローチされるべきだと考えています。プログラマはテストを作成し、テストを維持する必要があります。理想的には、品質保証担当者は、独自のテストを作成および維持するためのトレーニングを受ける必要があります。

繰り返しになりますが、あなたの質問に戻って、IDEは、完全な回帰スイートのソリューションではなく、自動化の迅速なソリューションになるように設計されています。

誰もがなぜIDE記録されたスクリプトがWebdriverで失敗するのか説明できますか?

私はIDEをしばらく使用していませんが、失敗する理由は、エクスポートされるスクリプトが単にsteps、全体ではなくJavaファイル。これは、Selenium IDEエクスポートは実行方法に関して不可知論的であると想定されているためです。私がjUnitのユーザーだとしましょう.. Selenium IDE常にTestNGにエクスポートした場合はどうですか?それは公平ではありません。.正直に自分で作成したいテストファイルを作成するたびにその1行を変更するよりもテストします。

Webアプリケーションの記録/再生テストが中断する理由 と呼ばれる調査の全文を読むことができます。

56
ddavison

すべてのテストケースをSelenium IDEで記録し、Java/WebDriverにエクスポートし、Eclipseを使用してWebDriverで実行できないのはなぜですか。

can実際にSeleniumでこれを行うIDE非常に簡単。SeleniumIDEでテストケース/テストスイートを記録し、「Java/JUnit 4/Webdriver」にエクスポートする.Javaファイル:これにより、Eclipseからインポートして実行できるJUnitテストが生成されます(もちろん正しいバージョンのJUnitを使用)。

100%の信頼性はありません。手動での変更や修正が必要になる場合がありますが、一般的にはかなりうまく機能します。単一の小さなテストケースから始めて、そこから作業します。

12
Marielle

IDEに記録し、WebDriverで記録を再生してみませんか?

IDEは何を待つべきかわからない

Bobが手動チェックを実行し、Selenium IDEとの対話を記録しているとします。彼はGUIの更新に時間がかかる操作を実行し、操作が終了したらボタンをクリックします。ボブは、操作の開始時に表示されていたスピナーが操作の終了時に削除されるため、GUIの更新が完了したことを知っています。 IDEボタンをクリックする前に操作が終了している必要があるという事実をキャプチャするつもりですか?(これはボタンがdisabledの場合ではないことに注意してくださいこれは仮定ではありません。動的テーブル(DataTablesによって管理されるテーブルなど)をテストするとき、ユーザーはいつでも変更できます。

これは、IDEで作成された一連のコマンドがWebDriverで失敗する理由の1つである可能性があります。何を待つべきかわかりません。

IDE)に手動で待機を追加することは可能ですが、これを実行している場合、「すべてのテストケースを記録するだけ」ではなくなります。 WebDriverのコードを書くようなものです。

ユーザーは非効率的

少し前に、ユーザーが複数ページのレコードがあるテーブルの最後のレコードをクリックするようにSeleniumを取得したいというSeleniumの質問がありました。それで、質問は、どのようにテーブルを最後のページまでページングし、最後のレコードをクリックすることができますか?誰か(おそらく私、あるいは他の誰か)は、テーブルがソート可能な場合、逆の順序でソートでき、Seleniumコードが最初のレコードをクリックできると指摘しました。これはp+1操作ではなく2つの操作です。p回クリックします。ここで、pはページ数に加えて、レコードをクリックするための1回です。

WebDriverのコードを書くとき、私たちが望む結果を得るために風光明媚なルートを取るのを避けるためにテストを書く機会があります。それが重要である理由に関する技術的な詳細については、次のポイントを参照してください。

セレンの運用にはコストがかかる

Seleniumコマンドを実行するソフトウェアがローカルであり、ブラウザーがローカルである場合、Seleniumの操作にコストがかかるとは思わないかもしれませんが、1台のマシンでコマンドを実行し、ブラウザーがリモートである場合、大幅なスローダウンに気づくでしょう。たとえば、Sauce Labs VMまたはBrowserStack VMでテストスイートを実行するためにブラウザを起動すると、ネットワークの遅延によりかなりの時間が追加されます完全なアプリケーションテストスイートの場合、これにはさらに数分かかることがあります。

IDEは、それぞれがSeleniumスクリプトとブラウザー間の往復を必要とする一連のコマンドを生成します。各往復が加算されます。2つの要素に同じテキストが含まれていることを確認するとします通常はIDEを使用しませんが、PythonでWebDriverコードを使用すると、スクリプトは次のようになるため、Seleneseは使用しません。

a = driver.find_element_by_id("a")
b = driver.find_element_by_id("b")
assert_equal(a.text, b.text)

このコードには4つのラウンドトリップが必要です。find_element...ごとに1回、textフィールドへのアクセスごとに1回です。同じテストを書くことができます:

a_text, b_text = driver.execute_script("""
var a = document.getElementById("a");
var b = document.getElementById("b");
return [a.textcontent, b.textContent];
""");
assert_equal(a_text, b_text);

これに必要な往復は1回だけです。 IDEを使用してアクションを記録する場合、コマンドのシーケンスは以前のスニペットのようになります:多くのラウンドトリップ。WebDriverのコードを記述する場合、最適化する機会があります。コード。

これは、Selenium IDEが役に立たないという意味ではありませんが、それを使用してテストを記録し、WebDriverでそれらの記録を再生することは考えられません。

9
Louis

初心者の場合、IDEスクリプトの80%をWebドライバーJavaスクリプトとして実際に使用できます。エクスポートされたIDEスクリプトをわずかに即興で演奏する必要があり、正常に動作します。

ただし、複雑な機能のテストを開始するときは、いくつかの基本的なJavaメソッドを学ばなければ解決できません。

3
user2959294

失礼ですが同意できません。簡単な記録と再生でわずかな時間で同じ結果が得られる場合、余分なコードを維持する必要はありません。

記録されたスクリプトの実装がアジャイルでなければならないことに同意します。ビルドインコマンドほど単純にすることはできません。また、テスト対象のアプリに固有の独自のマクロ(別名コマンド/エイリアス)をアジャイルにする必要があります。

それでも、適切に実装され、フロー制御のようないくつかのSelenium IDEプラグインの助けを借りて、このような複雑なテストスーツを維持し、HTMLランナー経由で再生するのは簡単です。 Selenium IDE HTMLスクリプトを使用して複雑なサイトを完全にカバーし、アプリのすべてのレスポンシブモードで同じスクリプトを再利用しました。

メンテナンスは簡単です。IDEは失敗したcmdをすばやく調整し、AJAX待機は、DOMコンテンツがページ上で変更されるのを待つことで簡単に正しく説明できます。私はまだこのAJAXの言い訳がSelenium IDEを却下することを確信していません。

Selenium IDEおよびMavenのSureFireテストプラグインで使用されるフロー制御コマンド/エイリアス/マクロのMaven統合については、以下を参照してください。 https://github.com/paulbors/sideflow

製品で自由に使用し、必要に応じて改善してください。

2
Paul Bors

webdriverでは、Selenium IDE SeleniumサーバーまたはRC経由で複数のサーバーにキャプチャされたテストケースを実行できます。これには、Selenium対応プロバイダーと統合するオプションが含まれます(下部のリンクを参照)。

たとえば、IDEでテストケースをキャプチャした場合、独自のSeleniumサーバーまたはSaucelabsなどのプロバイダーと簡単に統合して、Ubuntu上のFirefox、OSX上のSafari、Windows 8上のIE10でのテストケースの実行を処理できます他のテストケースと同様に、IDE(Eclipse/IDEA/etc))ビルダー(maven/gradle /)および/またはCIシステム経由で。

いくつかの例については、 https://saucelabs.com/Selenium をご覧ください。 Soastaを使用した負荷テストにもSeleniumテストケースを使用しました-WebDriverでは、さまざまなコンテキストで簡単なIDEテストを使用できます。

1
Brett

コードの複雑さが増すと、IDEを使用してコードを管理することが難しくなるためです。 IDEを使用すると、スクリプトのメンテナンスが困難になります。

また、IDEからwebdriverへのテストケースのエクスポートは、100%信頼できません。

1
Ankit

他の人々は多くの有益な答えを言っています。 1つ欠けているのは、IDEを使用する代わりにコードを記述すると、データベースに変更を加えることができることです。テストするWebサイトによって異なりますが、あるケースでは、Webサイトにクラスの複数のセクションがありました。テストの1つは、これらのセクションを1つにマージすることでした。IDEはできませんでした。ただし、webdriverを使用すると、すべてのテストデータをデータベースに追加し、マージを実行してから、データベースからデータを削除できます。

Webdriverのもう1つの利点は、Selenium Gridです。 Gridを使用すると、テストを並行して複数のブラウザーで実行できます。これにより、テストの実行が速くなり、コードをより徹底的にテストできます。

0
Alex Cook