こんにちは これは私の新しいSeleniumの記事です。 前に、スケーラブルなSeleniumクラスターの構成について詳しく説明しました( パートI 、 パートII )。 次に、Seleniumを自動テストのデバッグ用ツールとして使用する問題を検討し( one 、 two )、最後にWindowsでカオスから秩序を作成することができました( link )。 今日は、リンゴ、より正確には1つの大きなリンゴ(つまりApple)を扱います。
Seleniumは比較的単純なツールですが、Cupertinoのブラウザーで自動テストを実行しようとすると、人生が複雑になります。MacOSのSafariとiOSのモバイルSafariです。 デスクトップブラウザーを完全に理解するために、今日はMacOS用のSafariについて話しましょう。 今日、Safariの最新バージョンはMacOS専用に開発されています。 歴史的に、Safariでの作業は、Seleniumコマンドを内部ブラウザーコマンドに変換するブラウザー拡張機能を使用してSeleniumに実装されていました。 最初に、拡張機能はSafariに自動的にロードされました。 後で、Safariのセキュリティルールが変更されたため、拡張機能を手動で1回インストールする必要がありました。 最後に、Safari Xのリリースにより、すべてが大幅に変更されました。 Safariは、Chrome用のgeckodriver
やFirefox用のsafaridriver
に似た、スタンドアロンのWebドライバプロセスsafaridriver
使用するようにchromedriver
ました。 Safariでテストを実行するには、次のものが必要です。
safaridriver
などの空きポートでsafaridriver
(通常はSafariとともにインストールされ、/usr/bin/safaridriver
)を起動します。起動するコマンドは次のようになります。
$ /usr/bin/safaridriver --port 4444
次のSelenium URLを使用してテストを実行します。
http://localhost:4444/
- 実行中のドライバープロセスを停止します。
簡単そうですね。 そして、そうです! それにもかかわらず、問題がありますsafaridriver
は並行してSafariのコピーを1つしかsafaridriver
できません。 この制限を克服する方法は? -異なるポートでドライバーを数回実行し、これらのポートを使用して異なるURLでテストを実行します。 シンプルですが、多くの手作業が必要です。 このプロセスを自動化しましょう! これはどのように機能しますか? そして、これがその方法です:
- Selenium APIを提供するサーバーを起動し、
safaridriver
が配置されている起動時にsafaridriver
指示します。 - 新しいセッションの要求が到着すると、実行中のサーバーは空きポートを検索して占有します。 次に、このポートで
safaridriver
プロセスを開始し、以降のすべてのリクエストをそこでプロキシします。 - セッションを閉じる要求
safaridriver
プロセスも停止します。
説明したアルゴリズムは非常に単純なので、複雑なサーバーの開発は必要ありませんよね? 現在の標準であるSeleniumサーバーをサーバーとして使用する場合、このような単純なタスクには非常に複雑なツールを使用します。 これはなぜですか:
- Seleniumサーバー-象のように巨大です! 配布のサイズは20 MBから始まります。
- あなたの動物園の別の巨大な生き物-Javaのインストールが必要です。 更新に関するさまざまなポップアップと90年代からのグラフィカルインターフェイス。
- 彼は常に空腹であり、理由もなく記憶を食べます。
- それはかなり不十分に文書化されており、箱から出して動作しません。 彼を稼ぐには魔術師である必要があります。
要するに、より適切なツールSelenoidを紹介しましょう 。 Selenoidは、ファットなSeleniumサーバーを完全に置き換えるように設計された軽量デーモンです。 SafariでSelenoidを取得するのは非常に簡単です。
以下のJSONピースをファイルにコピーします(例:
~/browsers.json
):
{ "safari": { "default": "latest", "versions": { "latest": { "image": ["/usr/bin/safaridriver"] } } } }
Selenoid実行可能ファイルを実行してダウンロードします。
$ curl -Lo ~/selenoid \ https://github.com/aerokube/selenoid/releases/download/1.3.3/selenoid_darwin_amd64 $ chmod +x ~/selenoid $ ~/selenoid -conf ~/browsers.json -disable-docker
- URLを使用してテストを実行します。
http://localhost:4444/wd/hub
Javaと会社をインストールする必要はもうありません! しかし、私のように、これを自分の手で行いたくない場合は、単一行のスクリプトを使用して同様の結果を得ることができます。
$ curl -Lo ~/cm https://github.com/aerokube/cm/releases/download/1.2.1/cm_darwin_amd64 && \ chmod +x ~/cm && \ ~/cm selenoid start --browsers safari
必要に応じて、Selenoidの軽量UIをダウンロードして実行することもできます。 詳細については、 ドキュメントを参照してください 。
Safariでの単純なSeleniumのテストは、これほど近かったことはありません。 良い一日を!