Seleniumの仕組み:エピソード1 - トランスポーテーション

Selenium の内部動作を説明するシリーズ

2020年1月の最後の週末のやり取りの後、Selenium Issueで誰かが「なぜできないんだ…」と言った後、私が問題を説明した後、Selenium WebDriverのコマンドと、今日私たちがたどり着いた設計について説明を始めようと思いました。

このシリーズのすべてのページで繰り返しますが、Selenium のすべての小さな部分がどのように機能するかについて、多くの、時には迷惑なほどの思考が費やされています。

なぜですか?

Selenium は、偶然と得意なことによって、世界中の何百万人もの人々に使用されています。Microsoft や Google から小さなスタートアップまで、企業がすべてのブラウザでサイトが動作することを保証する方法です。

Selenium はどのようにブラウザと通信するのか?

Selenium は、長年にわたり、ブラウザと通信するために HTTP を使用することにしました。すべてのクライアントバインディングが使用でき、うまくいけば同じ結果が得られる REST 風 API を構築しました。

HTTP と REST風? 本当に?

ええ…

HTTP 部分から始めましょう。開始当初、各ブラウザと通信する最適な方法に基づいて、ブラウザごとに一意の通信方法が必要でした。そのため、Internet Explorer 用には COM コードを作成しました。問題なく、動作しましたが、悪夢を見ました。Firefox 用には、行ごとに読み取る巨大なものを作成しましたが、ありがたいことに、Mozilla の「ブラウザを自分のものにする」という姿勢のおかげで、多くのことができました。Opera では、DevTools プロトコル経由でアクセスできました。

さて、特に WebDriver の初期の頃は、N: M バインディングを維持する必要があることを意味していました。ここで、N は言語バインディング、M はサポートするブラウザです。これは良い製品への道ではありません。すべての言語が理解できるものが必要だと判断しました。また、かなり堅牢なものも必要でした。HTTP が選択され、JSONWireProtocol の構築に着手しました。

JSONWireProtocol は、JSON で通信する REST 風インターフェースを構築した場所です。REST の原則をすべて満たしているわけではありませんが、私たちのニーズに十分強力にするのに十分だったので、REST 風と言っています。

現在の状況との関係は?

ウェブ、インターネット、そして世界は進歩しました。なぜ Selenium は進歩しないのですか?

これは良い質問であり、問題は私たちが物事を進めようとしているということです。残念ながら、ウェブには、動作していないと壊れている状態があります。HTTP はプロトコルとして非常に堅牢です。また、多重化がどのように機能するかをあまり心配することなく、テスト用のクラスタを構築することもできます。これが Selenium Grid が作成された理由であり、テストを複数のデバイスや複数のマシンに分散する場合でも、依然として非常に良い選択肢です。

しかし、Chrome Debug Protocol を使用する一部の自動化フレームワークは、ウェブに似ています。彼らのように。

それで… Chrome のデバッグプロトコルを使用してブラウザを駆動するツールがあり、Selenium よりも優れている点のいくつかは、ブラウザとの通信方法の選択によるものです。残念ながら、それは Chrome 独自のプロトコルであり、Google は他のブラウザと協力してそうしないことに興味を持っていません。

また、Google チームからの興味深い設計上の選択肢を無視すると、永続的にオープンな接続が必要になるという問題があります。この場合、WebSocket を使用しますが、インターネットが起動するまでダウンしているという以前のコメントを覚えていれば、WebSocket は常に接続を再確立します。また、そのパイプを上下するトラフィック量も問題になります。

これは、ローカルマシン上のものとだけ通信している Puppeteer には問題ありませんが、Circle CI や TravisCI などの CI サービスと、AWS Device Farm、Sauce Labs、または BrowserStack のようなものを組み合わせると、突然、あなたとランナーの間に多くのインターネットが存在し、そのデータはどこかに到達する必要があります。

ブラウザベンダーと Selenium の人々で構成される W3C ブラウザテストおよびツールワーキンググループは、ブラウザへの奇妙なハッキーパッチを実行したり、ブラウザ自体を出荷したりすることなく、最初からクロスブラウザにできるようにするために、これがどのように見えるかを設計しようとしています。

もっと読みたいですか?

これは元々 https://www.theautomatedtester.co.uk/ に投稿されました。

最終更新日 2021年8月7日: ディレクトリ名の変更 (e9895f27c26)