- 家
- /
- Cypress vs Selenium
Cypress vs Selenium
CypressとSeleniumは、ブラウザテストに対して正反対のアプローチを取ります。一方はブラウザの内部で実行され、もう一方は外部からブラウザを操作します。このガイドでは、アーキテクチャ、対応言語、ブラウザカバレッジ、並列化、デバッグの各観点で両者を徹底的に比較し、コードサンプルと5分で実践できる結論を交えてお届けします。
- ブラウザとデバイス
- 6100+
- クラウド並列処理
- 100×
- 稼働時間SLA
- 99.99%
世界で最も革新的な企業のいくつかから信頼されています
どちらを選ぶべきでしょうか?
チームがJavaScriptまたはTypeScriptでコーディングを行い、Chrome、Edge、またはFirefoxで最新のWebアプリをテストし、組み込みのリトライ、タイムトラベルデバッグ、付属のテストランナーを備えた最高の開発者体験を求めている場合。
チームがJava、C#、またはRubyで開発を行っている場合、レガシーブラウザ(Internet Explorer、Safari)のサポート、Appium経由での実際のモバイルデバイス、またはCypressでは扱えないマルチタブやクロスオリジンのフローが必要な場合。
高速なコンポーネントテストやフロントエンドテストにはCypressを、幅広いクロスブラウザおよびモバイルカバレッジにはSeleniumを使いたい場合。TestingBotは両方を同じグリッド上で、並列に、1つのダッシュボードで実行します。
CypressとSeleniumとは何ですか?
2つのフレームワーク、2つのアーキテクチャ。しかし、目標は同じ。ブラウザを操作してエンドツーエンドテストを自動化することだ。
Cypress
リリース日:2017年 · Cypress.io · MIT
Cypressは、テストをブラウザの内部で、アプリケーションと同じ実行ループ内で実行するJavaScriptのエンドツーエンドテストフレームワークです。このアーキテクチャにより、DOMへの直接アクセス、自動待機、タイムトラベルスナップショットがデフォルトで利用できます。
ブラウザ内部で動作するため、Cypressは優れた開発者体験を備えています。組み込みのテストランナー、リアルタイムリロード、ビジュアルデバッガなどです。同じアーキテクチャは、JavaScriptとTypeScript、固定されたブラウザセット、シングルタブのフローに制限されるという制約ももたらします。
- JavaScriptとTypeScriptのみ
- 自動リトライ、タイムトラベルデバッグ、cy.intercept
- Chrome、Edge、Firefox、Electron · IE / Safariは非対応
Selenium
2004年リリース · オープンソース · Apache 2.0
Seleniumは、元祖ブラウザ自動化フレームワークであり、W3C WebDriver標準の基盤となっています。Selenium WebDriverは、ベンダー提供のドライバ(chromedriver、geckodriver、safaridriver、edgedriver)を介して、同一のワイヤプロトコルを使用してあらゆるブラウザを外部から操作します。
20年にわたるエコシステムの成熟により、主要なすべての言語に対応したバインディング、IDEとの高度な統合、成熟したPage Objectパターン、そして同じプロトコル上に構築されたAppiumを介した実際のモバイルデバイステストが実現しました。
- Java / Python / C# / Ruby / JavaScript / Kotlin
- W3C WebDriver標準、すべてのブラウザで動作します
- Chrome、Firefox、Safari、Edge、IE 11 · Appium経由での実際のモバイル
Cypress vs Selenium:並べて比較
CI での選択、移行、または両方の実行において重要なあらゆる側面において。
| 項目 |
|
|
|---|---|---|
| First release | 2017 | 2004 |
| Maintained by | Cypress.io | Open-source community + W3C |
| Languages | JavaScript / TypeScript only | Java, Python, C#, Ruby, JS, Kotlin |
| Architecture | Runs inside the browser | Drives the browser via WebDriver |
| Browsers | Chrome, Edge, Firefox, Electron | Chrome, Firefox, Safari, Edge, IE 11 |
| Mobile testing | Viewport emulation only | Real iOS + Android via Appium |
| Auto-waiting | Built-in retries | Manual waits or WebDriverWait |
| Network stubbing | First-class (cy.intercept) | BiDi (Selenium 4) or proxy |
| Multiple tabs / windows | Not supported | Window switching API |
| Cross-origin | cy.origin() (constrained) | Native |
| Test runner | Built in | Bring your own (JUnit, pytest, Mocha…) |
| Debugging | Time-travel snapshots + runner | IDE + driver logs |
| Parallel execution | Cypress Cloud (paid) or a grid | Selenium Grid |
| Developer experience | Real-time reload, in-browser | Functional, IDE-based |
| Ecosystem maturity | Growing fast since 2017 | 20 years of integrations |
| Free for open source on TestingBot | ✓ | ✓ |
機能に関する注記は、2026年時点のCypress 13.xおよびSelenium 4.xを反映しています。両フレームワークはTestingBotのクラウド上で動作し、Cypressはtestingbot-cypress-cli経由で、SeleniumはWebDriverハブ経由で実行されます。
ログインし、結果を検証する
組み込みのリトライ(Cypress)を使用したログインフローと、明示的な待機(Selenium)を使用したログインフローを比較します。どちらも同じTestingBotグリッド上で実行されます。
// run via: testingbot-cypress run describe('login', () => { it('redirects to the dashboard', () => { cy.visit('https://app.example.com/login'); // auto-retries until actionable cy.get('#username').type('jane@example.com'); cy.get('#password').type('••••••••'); cy.contains('button', 'Sign in').click(); cy.url().should('include', '/dashboard'); cy.contains('h1', /welcome, jane/i).should('be.visible'); }); });
# Driver points at TestingBot remote URL from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def test_login_redirects_to_dashboard(driver): driver.get('https://app.example.com/login') driver.find_element(By.NAME, 'username').send_keys('jane@example.com') driver.find_element(By.NAME, 'password').send_keys('••••••••') driver.find_element(By.CSS_SELECTOR, 'button[type=submit]').click() # explicit wait WebDriverWait(driver, 10).until(EC.url_contains('/dashboard')) welcome = driver.find_element(By.TAG_NAME, 'h1') assert 'Welcome, Jane' in welcome.text
Cypressのスペックはtestingbot-cypress-cli経由で実行され、SeleniumのテストはWebDriverハブに接続します。どちらも同じTestingBotダッシュボードに表示されます。
どちらを選ぶかは
Cypressを選ぶとき
- 技術スタックがJavaScriptまたはTypeScriptを主体としており、テストランナー、アサーション、リトライがフレームワークに付属していてほしい場合。
- Chrome、Edge、またはFirefoxで最新のWebアプリをテストしており、Internet ExplorerやSafariの要件がない場合。
- 開発者体験を重視している場合:タイムトラベルデバッグ、リアルタイムリロード、読みやすい失敗時のスナップショット。
- プロキシを追加することなく、cy.interceptによる一流のネットワークスタブ機能が必要な場合。
- フローがシングルタブ内に収まり、ほぼ単一のオリジンで完結する場合(cy.originは制約の範囲内で役立ちます)。
Seleniumを選択する場合
- チームがJava、C#、Ruby、またはPythonで開発を行っており、JavaScript優先のAPIではなく、完全なバインディングの互換性を求めている場合。
- Internet Explorer 11、Safari、またはCypressがサポートしていないブラウザビルドでテストする必要がある場合。
- 実際のiOSおよびAndroidデバイスをテストする場合。Appiumは、Seleniumの基盤となっているWebDriverプロトコルを再利用します。
- テストが複数のタブやウィンドウを開いたり、複数のオリジンにまたがったりする場合。これらはCypressでは部分的にしか扱えません。
- 書き直したくない成熟したPage ObjectライブラリやBDDフレームワーク(Cucumber、SpecFlow)をお持ちの場合。
どちらかを選ぶのはやめて、両方を同じグリッドで実行しよう
Cypressをtestingbot-cypress-cli経由で実行し、SeleniumをWebDriverハブに指定します。テストは同じ6100+ブラウザとデバイス、同じダッシュボード、同じ並列スロット、同じEUデータ所在地を共有し、Cypress Cloudのサブスクリプションは不要です。
- Cypress CloudプランなしでのCypress並列化
- 両フレームワークのテスト履歴を並べて表示
- オープンソースであれば無料、両方のフレームワーク
command_executor='https://hub.testingbot.com/wd/hub'
)
よくある質問
チームがこれらのフレームワークを選択する前、あるいはフレームワーク間を移行する前に自問する質問。
CypressはSeleniumより優れていますか?
どちらかが普遍的に優れているわけではなく、それぞれ異なるチームに適しています。Cypressは、最新のWebアプリをテストするJavaScriptおよびTypeScriptチームにとって、開発者体験で勝ります。組み込みのリトライ、タイムトラベルデバッグ、付属のテストランナーなどです。Seleniumは幅広さで勝ります。より多くの言語、Internet ExplorerやSafariを含むすべてのブラウザ、Appium経由での実際のモバイル、マルチタブやクロスオリジンのフローに対応します。制約の範囲内での使いやすさを求めるならCypressを、カバレッジと柔軟性を求めるならSeleniumを選びましょう。
SeleniumからCypressに移行すべきでしょうか?
あなたのニーズがCypressの制約の範囲内に収まる場合に限ります。スイートがJavaScriptベースで、Chrome、Edge、またはFirefoxを対象としており、シングルタブ内に収まる場合は、Cypressのリトライとデバッグ機能が移行を正当化することがよくあります。Java、C#、またはRubyに依存している場合、Internet ExplorerやSafariをテストする場合、実際のモバイルデバイスを操作する場合、あるいはマルチタブやクロスオリジンのフローが必要な場合は、移行によって機能を失うことになります。多くのチームは両方を維持します。フロントエンドテストにはCypressを、幅広いクロスブラウザおよびモバイルカバレッジにはSeleniumを使用します。
CypressはSeleniumがサポートするすべてのブラウザをサポートしていますか?
いいえ。CypressはChromiumベースのブラウザ(Chrome、Edge、Electron)とFirefoxで動作し、WebKitは実験的にサポートしています。Internet Explorerや実際のSafariは操作できません。Seleniumは、ベンダー提供のドライバを介して、Internet Explorer 11やSafariを含む実際のブラウザバイナリを操作します。IEまたはSafariのカバレッジが必要な場合は、この2つのうちSeleniumが唯一の選択肢となります。
Cypressはモバイルアプリのテストを行うことができますか?
ネイティブでは対応していません。Cypressはモバイル画面をエミュレートするためのビューポートのリサイズ機能を提供していますが、ネイティブのiOSアプリやAndroidアプリを操作することはできません。実際のモバイルテストには、Appium、XCUITest、Espresso、またはMaestroが必要です。Appiumは、Seleniumの基盤となっているWebDriverプロトコルを再利用します。TestingBotは、実際のiOSおよびAndroidデバイス上でこれらのすべてをサポートしています。
Cypressを並列で実行するにはCypress Cloudが必要ですか?
いいえ。Cypress独自の並列化と録画はCypress Cloud(有料サブスクリプション)経由で実行されます。TestingBotは代替手段です。testingbot-cypress-cliがスペックを圧縮してアップロードし、クラウドグリッド上のChrome、Edge、Firefoxにわたって並列に実行します。ライブログとビデオが利用でき、Cypress Cloudプランは不要です。並列数はtestingbot.jsonで設定します。
CypressとSeleniumは同じCIパイプラインを共有できますか?
はい。どちらもCI/CDで実行され、TestingBot上の同じ場所に結果を報告します。一般的な構成では、高速なフロントエンドスペックにはCypressを、幅広いクロスブラウザおよびモバイルカバレッジにはSeleniumを同じパイプライン内で実行し、どちらも同じ認証情報とビルド名でTestingBotグリッドを対象とします。
TestingBot上でCypressとSeleniumを実行できますか?
はい、どちらも同じTestingBotクラウド上で動作します。Cypressはtestingbot-cypress-cliのnpmパッケージ経由で実行され、testingbot.jsonファイルで構成し、testingbot-cypress runで起動します。Seleniumはwebdriver.Remoteを介してhttps://hub.testingbot.com/wd/hubに接続します。どちらのテストも同じダッシュボードに表示され、並列スロットを共有し、同じEUデータ所在地、ビデオ録画、CI/CD統合のメリットを享受できます。どちらもオープンソースプロジェクトでは無料で利用できます。
Related comparisons
無料トライアルにサインアップ
TestingBotのクラウド上で、Cypress、Selenium、またはその両方を実行できます。Cypress Cloudのサブスクリプションは不要です。
無料トライアルを開始する