自動化テストは、現代のソフトウェア配信において交渉の余地のない部分となっています。この分野で活動している場合は、製品や新機能をより迅速に展開し、高品質を維持し、ユーザーの期待に応えなければならないというプレッシャーをすでに感じているかもしれません。
幸運なことに、テストを自動化すると、結果の精度が大幅に向上し (最大 43%)、チームの俊敏性が向上します (42%)。ただし、これらの利点を実現するには、作業を容易にする適切なツールが必要です。
そこで Selenium が登場します。
非常に柔軟性が高く、さまざまな環境、ブラウザ、ワークフローにまたがって作業できます。基本的に、テストのアプローチに適応します。
一番良かった点は? Selenium テストの概要、テストの概要、セットアップ方法、最初の自動テストの作成方法を説明するこのガイドを用意しました。これは、実際の Selenium テストで直面する課題に効果的に取り組むために必読の書です。
始めましょう。
Selenium は、Web ブラウザを自動化するためのさまざまなツールとライブラリで構成されるオープンソース ソフトウェアです。これにより、クリック、入力、ナビゲーション、Web 要素の操作などのユーザー アクションをシミュレートし、さまざまな条件下でアプリがどのように動作するかをテストできます。
Selenium では、Chrome、Firefox、Safari、Edge などの最新の Web ブラウザーで機能テストを作成したり、特に CI/CD パイプラインで実行を高速化するためにヘッドレス ブラウザー (Chrome Headless など) でテストを実行したりできます。 Windows、macOS、Linux でも動作します。
Selenium は、JavaScript (Node.js)、Groovy、PHP、C#、Perl、Scala、Python、Ruby などの多くの一般的なプログラミング言語でテストを作成できる、Selenese と呼ばれるテスト ドメイン固有の言語を提供します。
ライセンス費用を負担せずに使用を開始できます。その活発なコミュニティは定期的に修正、プラグイン、機能強化を提供します。トラブルシューティングのための広範なオンライン ドキュメントやチュートリアルも見つけることができます。
Selenium のアーキテクチャがなぜそのような構造になっているのか、またそれが実際のテストの課題をどのように効果的に解決するのか疑問に思ったことはありますか?その進化をたどって、そのデザインの背後にあるストーリーを明らかにしましょう。
2004: Selenium は、ThoughtWorks の Jason Huggins が Web アプリのテストをより効率的にするツールを開発したときに必要に迫られて生まれました。
当初は「JavaScriptTestRunner」と呼ばれていましたが、後に Selenium と改名されました。これは Mercury Interactive の漫画的なジャブであり、セレン要素が水銀中毒に対抗するための競合ツールです。
2005: JavaScript の同一生成元ポリシーを克服するために、Selenium リモート コントロール (RC) が導入されました。これにより、テスターはさまざまなプログラミング言語でスクリプトを作成し、サーバーベースのプロキシとして機能することで、異なるブラウザーでスクリプトを実行できるようになりました。
2006: Selenium IDE はシンプルな Firefox プラグインとして登場しました。記録と再生機能により、プログラマーでなくてもテスト自動化にアクセスできるようになりました。
2008: Simon Stewart は、サーバーを必要とせずに直接ブラウザーを自動化できる Selenium WebDriver を発表しました。 RC から WebDriver への移行は大きな進歩を示し、RC は 2011 年の Selenium 2.0 で正式に非推奨になりました。
2011: Selenium Grid は、複数のブラウザーや環境間でテストを並行して実行できるようにすることで、テスト実行に革命をもたらし、大規模なテストをより効率的にしました。
2018: Selenium WebDriver が公式の W3C 標準になりました。
2021: Selenium 4 は、ネイティブ W3C WebDriver サポート、刷新された Selenium Grid、開発者ツールとのより緊密な統合など、大幅な改良を加えてデビューしました。
2023: 年間を通じての更新は、WebDriver BiDi (双方向プロトコル) サポートの拡大と、依存関係管理のための Selenium Manager の強化に重点を置きました。 Selenium 4.16 は、パフォーマンスと安定性の強化で今年の締めくくりとなりました。
2024: Selenium 4.27 では、Chrome DevTools Protocol (CDP) との統合の拡張、WebDriver BiDi のサポートの強化、Selenium Grid のパフォーマンスの向上、非同期 JavaScript 実行の処理の向上が導入されました。
Selenium は単なる 1 つのツールではなく、各コンポーネントが特定の目的を果たす一連のツールです。これらを組み合わせることで、自動テストのための堅牢なエコシステムが構築されます。次のセクションですべてを詳しく見てみましょう。
Chrome および Firefox 上のこのブラウザ拡張機能を使用すると、テスト ケースを記録、編集、再生できます。 Selenium IDE を使用すると、開始するためにコードを記述する必要はありません。プログラミングに飛び込むことなく、簡単なプロトタイプを作成したり、簡単なテスト スクリプトを作成したりするのに最適です。
Selenium WebDriver は、コードを使用してブラウザと直接対話できる強力なツールです。動的な Web 要素や、ドラッグ アンド ドロップやファイルのアップロードなどの高度な操作を処理し、ドライバーの実行可能ファイルを使用してブラウザー固有の機能を管理できます。 Selenium WebDriver は、モバイル ブラウザのテストにおいても重要なコンポーネントです。
プロジェクトが拡大し、さまざまなブラウザ、オペレーティング システム、またはデバイス間でテストを実行する必要がある場合、Selenium Grid が介入します。
これにより、テストを複数のマシンに分散して実行を高速化できます。 Selenium Grid は、ハブとノードのアーキテクチャを使用して動作します。ハブはテスト実行リクエストを調整し、ノードは指定されたブラウザーまたはデバイスでのテストの実行を処理します。
このツールの使用を開始するときは、まず Java、Python、C# などの好みのプログラミング言語でライブラリを使用してスクリプトを作成します。スクリプトはブラウザに対する一連の命令のようなもので、Web ページを開く、フォームに記入するなど、ブラウザに何をすべきかを指示します。
スクリプトの準備が完了すると、Selenium の WebDriver はスクリプトからコマンドを取得し、ブラウザー ドライバーに送信します。次に、ドライバーはコマンドをブラウザーが理解できる形式に変換します。 W3C WebDriver プロトコルは、古い JSON Wire プロトコルに代わる通信に使用される標準です。
次のステップでは、ブラウザ ドライバは、翻訳されたコマンドをブラウザ内の実際のアクションに変換します。リンクをクリックするかページをスクロールするかにかかわらず、これらのアクションは手動で実行しているかのように実行されます。
ブラウザは各アクションを完了すると、ブラウザ ドライバーに応答します。
このフィードバックは WebDriver に渡され、WebDriver がスクリプトに送り返します。これにより、エラーがあった場合にアクションが成功したかどうか、またはブラウザの現在の状態に基づいてさらなる手順を実行する必要があるかどうかを知ることができます。
Selenium は、ソフトウェア開発ライフサイクル (SDLC) の技術チームの間で広く好まれているツールです。これらの主要グループがそれをどのように使用するかは次のとおりです:
彼らは Selenium を使用して、現実世界のシナリオでフロントエンド コードがどのように動作するかを検証します。これは、JavaScript の実行の問題や CSS レンダリングの違いなど、開発中にブラウザ固有の癖を見つけるのに役立ちます。
Selenium を使用すると、DevOps および自動化エンジニアにとって、スケーラブルで堅牢なテスト パイプラインの作成が簡単になります。複数のブラウザーや環境で何百ものテストを並行して実行できるため、開発チームへのフィードバック ループがより速くなります。
さらに、Selenium は Jenkins、GitHub Actions、Kubernetes などのツールと互換性があるため、CI/CD ワークフローが合理化され、欠陥のあるコードが本番環境にデプロイされるリスクが最小限に抑えられます。
Selenium の使用は、UI 要素のクリックを自動化するだけではありません。ソフトウェア テスターは、これを利用して、ログイン、フォームの送信、トランザクションの完了など、実際のユーザーの動作を模倣するスクリプトを作成できます。
一方、QA スペシャリストにとって、Selenium は回帰テスト スイートと適切に統合されており、アプリの更新によって重要な機能が損なわれず、変更の頻度に関係なく一貫したパフォーマンスを提供し続けることが保証されます。
Selenium ソフトウェア テストのために完全に準備する必要があるものについて説明します。
まず、ページ オブジェクト モデル (POM) やファクトリー メソッドなどのデザイン パターンの実装に慣れておく必要があります。これらは、保守が容易なモジュール式の再利用可能なテスト スクリプトを作成するのに役立ちます。
テストの信頼性を維持するには、要素が見つからない例外やタイムアウトなどの一般的な問題を効果的に処理することも重要です。アプリが JavaScript に大きく依存している場合、Selenium で非同期操作を管理する方法を知っておくと、不安定なテストが減ります。
最新の Web アプリはドキュメント オブジェクト モデル (DOM) を動的に更新することが多いため、従来のロケーターは信頼できません。要素を動的にターゲットにするには、柔軟な XPath 式と CSS セレクターをマスターする必要があります。
Selenium 4 の相対ロケーターを活用します。これにより、他の要素との相対的な位置に基づいて要素を検索できるため、複雑なレイアウトのテストが簡素化されます。
TestNG、JUnit、PyTest などの一般的なテスト フレームワークについても知っておく必要があります。これらは、テスト スイートを効果的に整理して実行するのに役立ちます。
並列実行、依存関係管理、詳細な範囲レポートなどの重要な機能が備わっており、これらすべてにより大規模なテスト環境の管理がはるかに簡単になります。
これらのフレームワークを Selenium と統合すると、特に共同作業環境または CI/CD を多用する環境で作業している場合、テストのスケーラビリティと保守性が向上します。
ブラウザドライバーとその構成を忘れないでください。互換性の問題を回避するには、Selenium Manager などのツールを使用して、ブラウザーと WebDriver のバージョンを自動的に調整します。
複数のブラウザーまたはプラットフォーム間でテストする場合、Docker などのツールを使用すると、一貫した実行環境が提供され、セットアップが簡素化されます。
大きな点は、Selenium テストを CI/CD パイプラインに統合することです。 Jenkins、GitLab CI/CD、GitHub Actions などのツールを使用すると、コードが更新されるたびにテストが実行されるようにテストを自動化できます。これにより、問題が早期に発見され、時間と労力が節約されます。
TestGrid などのクラウド テスト プラットフォームを活用して、インフラストラクチャを自分で管理せずに、幅広いデバイスやブラウザでテストを実行することもできます。
デバッグも重要なスキルです。要素の検査、コンソール ログの分析、ネットワーク呼び出しのデバッグのためのブラウザ開発者ツールに精通している必要があります。
さらに、IDE のデバッグ ツールを使用してステップスルー テストやログ分析を行う方法を知っておくと、スクリプトの問題をより迅速かつ効率的に診断できるようになります。
最新のアプリケーションの多くは API に大きく依存しており、Selenium の UI テストと API テストを組み合わせることで、より幅広い範囲をカバーできます。 Postman や RestAssured などのツールはこれに最適であり、Selenium の専門知識をうまく補完できます。
前提条件を説明したところで、Selenium 自動テストを段階的に見ていきましょう。また、開始に役立ついくつかの例と実用的な洞察についても説明します。
何かを始める前に、ツールをセットアップしてください。 Selenium WebDriver、ブラウザ ドライバー (Chrome 用 ChromeDriver や Firefox 用 GeckoDriver など)、および使用する予定のテスト フレームワーク (TestNG や PyTest など) をインストールします。
互換性の問題を避けるために、WebDriver のバージョンがブラウザのバージョンと一致していることを確認してください。 Selenium Manager を使用すると、WebDriver のバージョンがブラウザのバージョンと一致していることを自動的に確認できます。
Web ページを開いてタイトルを印刷するスクリプトを作成するなど、すべてが確実に機能するように小さなことから始めてください。自信がついたら、要素の操作やページの動作の検証などの追加機能を追加します。
また、破壊的な変更を避けるために、依存関係を常に最新の状態に保つようにしてください。
適切に構造化されたスクリプトは、変更が発生したときに時間を節約し、共同作業を容易にします。チームで作業しているときは、他の人が複雑なコードをすぐに解くことなく、テストを理解して拡張できる必要があります。したがって、スクリプトの構築に時間をかけてください。
POM を使用して、テスト ロジックを UI の詳細から分離します。たとえば、ログイン ページをテストしている場合は、ユーザー名フィールド、パスワード フィールド、ログイン ボタンなどの要素を処理する「LoginPage」クラスを作成します。次に、ロケーターを毎回書き換えるのではなく、テスト スクリプトからこれらのメソッドを呼び出します。
テスト ケースは、明確、具体的、そして実行可能である必要があります。 e コマース サイトをテストしているとします。その場合、1 つのテストでは「ラップトップ」を検索すると関連する製品が表示されるかどうかを確認し、別のテストでは「カートに追加」をクリックすると実際に商品が追加されるかどうかを確認できます。
エッジケースについても考えてください。ユーザーが「laptop123$$$」または英数字と特殊文字の両方を含む同様の入力を入力した場合はどうなるでしょうか?検索はまだ機能しますか?テストをパラメータ化すると、コードを複製することなく複数のシナリオに対応できます。
スケールアップする前に、ローカルでテストしてください。これがスクリプトを検証する最も簡単な方法です。パスワード変更機能をテストしていますか?ローカル ブラウザで実行して、入力と出力が期待どおりであることを確認します。
ローカル実行はデバッグにも最適です。何かが失敗した場合は、実行を一時停止し、ブラウザを検査し、リアルタイムでスクリプトを調整できます。ヘッドレス モードを使用して UI レンダリングをスキップします。ブラウザーの動作を見る必要はないが、結果は必要な場合に最適です。
ローカルですべてが正常に動作したら、CI/CD パイプラインや分散セットアップなどの大規模環境で自信を持って実行できます。
なぜですか?時間の節約になるからです。
これがシナリオです。Chrome と Firefox で検索、ログイン、チェックアウトの機能をテストする必要がある場合は、Selenium Grid を構成するか、TestNG の並列実行を使用できます。
並列実行により、ブラウザ固有の問題もより迅速に発見されます。たとえば、ドロップダウンは Chrome では機能しますが、Firefox では動作がおかしくなる場合があります。これらの不一致を早期に修正すると、将来のトラブルを回避できます。
動的要素は扱いにくい場合がありますが、最新の Web アプリのいたるところに存在します。リロードするたびに「送信」ボタンの ID が変わるページを想像してください。 Selenium を使用してコード スニペットを作成し、それを見つけて操作することができます。
柔軟な XPath 式を使用して、テキストに「送信」という単語が含まれるボタン要素を識別します。これにより、コードは自動化の堅牢性を維持し、Web ページの構造の変更に適応できるようにします。
テストが失敗した場合、ログがあれば救われます。たとえば、ログイン テストが失敗した場合、現在の URL とページ ソースをログに記録して、何が問題だったのかを把握できます。 Python の組み込み「ロギング」モジュール、Java の Log4j、または SLF4J などのロギング ライブラリを使用します。
ログに加えて、失敗のスクリーンショットも非常に貴重となる場合があります。何かが失敗したときにスクリーンショットを自動的にキャプチャするようにテストを構成します。これは、要素の欠落や予期しない UI の変更などの問題を簡単に特定する方法です。
Jenkins や GitHub Actions などのツールを使用してテストを自動化します。
たとえば、チームが新しいコードをプッシュするたびに、パイプラインは自動的に最新の変更を取得し、テストを実行し、結果をレポートできます。これは、プロジェクトを 24 時間年中無休で監視するようなものです。この設定では、即座にフィードバックが提供されるため、開発がスピードアップします。
Selenium はブラウザ自動化のための強力なツールですが、独自の一連の障害があり、その中にはすぐには明らかではないものもあります。 Selenium ソフトウェア テストの難しい側面は次のとおりです:
ウェブが進化するにつれて、Selenium も進化します。しかし、その次は何でしょうか? Selenium テストを形作る可能性のある将来を見据えた傾向と可能性は何ですか?
まず、ビジュアル回帰ツールの台頭により、従来のテストでは UI の不一致を常に検出できるわけではないことがわかりました。ただし、Selenium がビジュアル テストのネイティブ サポートを統合している場合はそうではありません。
ボタンがクリック可能であると主張する代わりに、ボタンが完全に配置され、正しく色付けされ、すべてのデバイスで同じように見えることを検証できます。
Selenium スクリプトには「assertVisualConsistency(page, “baseline_screenshot”)」のようなコマンドが含まれる場合があり、UI のドリフトには自動的にフラグが立てられます。
量子コンピューティングによる量子飛躍について聞いたことがありますか?今は SF のように聞こえるかもしれませんが、これは最終的に Selenium のテストに影響を与える可能性があります。
量子アルゴリズムは大規模なテスト スイートを飛躍的に高速に処理できるため、数百の環境にわたるリアルタイム テストが可能になります。これにより、大規模なクロスブラウザーおよびクロスデバイスのテストが瞬時に行われる可能性があります。
最後に、テスト シナリオを視覚的に定義すると、Selenium が基礎となるコードを生成するドラッグ アンド ドロップ インターフェイスをイメージしてください。これは伝統的に開発者用ツールですが、将来的にはノーコードまたはローコードの拡張機能が導入される可能性があります。
これにより、上級ユーザー向けの Selenium の柔軟性を維持しながら、非技術的なテスターの参入障壁が低くなります。
TestGrid は、Chrome、Firefox、Safari、Opera、Edge などの主要なブラウザだけでなく、さまざまなオペレーティング システムやデバイスにわたって Web アプリケーションが完璧に動作するように設計されたオールインワン プラットフォームです。
TestGrid を使用すると、自動化された Selenium テストをクラウドまたはオンプレミスで実行できるため、最適な場所でテストできる柔軟性が得られます。直観的なインターフェイスにより、技術専門家でなくても、テストのセットアップと管理が簡単になります。
TestGrid の特徴は何ですか?
Selenium テストを次のレベルに引き上げる準備はできていますか?
Selenium テストは、強力な自動化機能により Web アプリケーションのテストを合理化します。そのツールとテクニックをマスターすることでテストの効率が向上し、最新のアプリケーションに対する信頼性、拡張性、高品質のソフトウェア配信が保証されます。
出典: この記事はもともと testgrid.io で公開されました。
以上がSelenium テスト: 完全なステップバイステップのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。