回答:
スタンドアロンの「記録と再生」ツールとしてのSeleniumは、技術者以外のユーザーには理想的だと思います。私のパスを記録してからそれを再生するというイディオムは直感的であり、インターフェイスは明らかに新人以外を対象としていますが、それほど威圧的ではありません。
Selenium 2 / Selenium RCは明らかに上位の複雑さであり、プログラマー以外の人にそれとのインターフェースを要求することはできないと思います。(実際、Java以外の言語用の完全なインターフェースがないことに不満を感じています。現在のリリースは暫定的なものですが、神秘的な将来のリリースではなく、完全なPHPソリューションを今すぐ使用できます。しかし、それはそうではありません。あなたが求めているものです。)
あなたのテスターの男がセレンについてまだ知らないなら、彼はあなたにそれについて話すためにあなたの口に四角でキスするでしょう。
Selenium-IDEは、非プログラマーが使用することを目的として設計されています。しかし、私の経験では、(生成されたXPathを使用して)その方法で生成されたスクリプトは非常に壊れやすいということです。
ですから、それらを作成することはまったく問題ありません。アプリケーションがかなり安定している場合、管理はそれほど悪くありません。または、アプリケーションが開発中であるか、頻繁に変更されている場合は、ほぼ不可能です。
Selenium-RCは純粋に開発者ツールです。
data-test-label
ますが、要素のカスタム属性の階層に基づくパスを表します。私はそれをGitHubに入れましたが、会社の時間に作成されました...
Software Quality Assurance&Testingベータサイトでこの質問をするか、既に質問されている同様の質問を検索することを強くお勧めします。記録と再生のQAにSeleniumを使用することで、より深い経験が得られます。
エリックの答えは、記録および再生ツールを使用したほとんどのQAエンジニアの経験です。結果のテストは壊れやすく、保守が困難でした。開発者は、Selenium RCでPage Objectsを使用して、はるかに保守しやすいUIテストスイートを作成できます。これは、利用可能な場合により優れたオプションです。
これは、Selenium IDEがテスターにとって役に立たないということではありません。ただし、その有用性(および支援ではなくテストの労力を損なう可能性)は、UIの修正方法に大きく依存します。開発サイクルの早い段階でUIをフリーズできる場合は、記録と再生で最良の結果が得られます。古いXPathが壊れている場合に新しいXPathを取得する方法、およびUIの変更(XPathが無効になったため)または機能のバグが原因でテストが失敗したかどうかを確認する方法をテスターに教える必要がある場合があります。
Selenium IDEを使用する方が、一般的に安定したUIを持つプロジェクトでは、自動化をまったく行わないよりも優れていると思います。マイナーな変更があるたびに、安定したUIで何百もの手動テストを実行することは、リアルタイムシンクです。それに応じて期待を設定し、UIの記録と再生の自動化の使用を開始すると、UIを変更するとQAスケジュールに非常に大きな影響があることを認識してください。テスト担当者は、自動化する領域を適切に選択して選択することができます。
Java / JUnitで相対XPathを使用してSeleniumテストを作成するように非プログラミングの人々をトレーニングすることに問題はありませんでした。プログラマーがそれをセットアップし、基本的なテストテンプレートを作成します。テスターは、記録してから微調整することにより、より多くのテストを開発します。テスターが何か特別なものが必要な場合は、プログラマーにそれを書くように依頼します。テスターは、HTMLとXPathの本当に基本的な理解と、Selenium API(およびFirefoxとFirebugのSeleniumプラグイン)を取得するための少しの助けが必要です。
面白いことに、最初はきゅうりのような奇抜なものを検討していましたが、このSeleniumとJUnitの組み合わせは十分にシンプルであることがわかりました。不思議なことに、以前のJavaの経験がないテスターは、JUnitテストの作成に深刻な問題を抱えていませんでした。唯一重要なことは、経験豊富なプログラマーがテストをセットアップすることです。そのため、テスターは基本的に新しいテストを作成してSeleniumメソッドを呼び出すだけで済みます。
キーワード駆動のテストフレームワークの使用を検討してください。アイデアは、開発者が高レベルのキーワードを開発し(またはライブラリに付属するキーワードを使用する)、テスターがこれらのキーワードを高レベルのテストケースに組み立てるだけです。
私が過去数年にわたって携わってきたチームは、このアプローチから多くのメリットを得ています。ロボットフレームワークを使用していますが、キュウリ (複数の言語でサポートされています)やスペックフロー(.netのキュウリ実装)などもあります。
たとえば、このアプローチを使用すると、テスターは次のようなテストを作成できます。
| Login with valid credentials
| | Go to page | LoginPage
| | Login as a normal user
| | The current page should be | DashboardPage
これらのキーワードは、次のようにpython(またはjava、.NET言語)で記述できます。
class LoginPage(PageObject):
def login_as_a_normal_user(self):
username = self.browser.find_element_by_id("username")
username.send_keys(DEFAULT_USER)
password = self.browser.find_element_by_id("password")
password.send_keys(DEFAULT_PASSWORD)
... and so on...
テスト担当者がすぐに生産性を高めることができるセレン(「ページに移動」、「ページに含まれる」、「クリックボタン」など)に基づく一般的なキーワードを備えたロボット用の既製のライブラリがあります。
多くの場合、これらの一般的なキーワードで十分ですが、ページオブジェクトとページ固有のキーワードの概念を使用すると、テストを作成できます。開発者はアプリのすべてのページにクラスを作成でき、各ページに特別な目的のキーワードを記述できるため、テスターは物理的な実装ではなくページの論理機能に集中できます。
ロボットフレームワークでページオブジェクトを使用する方法を詳しく説明した、私が書いたいくつかのブログ投稿を次に示します。
実際に、技術者以外のチームメンバー(この場合は、プログラミングの背景がないSQA)がいる状況で、このような状況が発生しました。残念ながら、これはうまくいきませんでした。
最初に私たちのチームは記録と再生ツールを試しましたが、他の人が言ったように、それが生成するテストは非常に壊れやすく、維持するのが困難です。SQAは最終的に、テストが変更されるたびにテストを再記録するというパターンに陥りました。特に、1つの変更がほとんどのテストに違反した場合(ウェブサイトのメインページに1つの変更があり、約60テストの割合)。
私たちはJavaでSeleniumテストを作成し、SQAはこれまでJavaを使用したことがなかったので、彼は自分でJavaを学んでいました。私たちは、いくつかの非常に貧弱なプログラミング手法を使用してテストを仕上げていることがわかりました。
assertTrue(false)
テストを終了するためにかなりの数の行を見た私がチームに到着したとき、元のSQAが終了し、テストを実行していたため、コンソール例外が大量に発生し、無視するように言われました。その後、開発者を巻き込み、多くのコードを大幅に書き直して、実際に正しく機能し、保守可能で理解しやすいものにしました。
これらの問題のいくつかは、技術的な人がいて助けてくれる人がいれば避けられたのではないかと思います。彼らがパブリックスタティック変数をプライベートインスタンス変数にする理由、JUnitのしくみ、WebDriverWaitの使用方法、またはThread.sleep()をどこにでも分散することが悪い理由を説明している場合は、より優れたコードがあったかもしれません。
しかし、現状では、最終的には保守不能なコードを使用してしまい、最終的にはほとんどのコードを書き直しただけなので、時間と費用が大幅に浪費されていました。