開発者のサービスでのSelenium WebDriver

バックエンドストーリーを含むDmitry Kostichevのレポートのデコード//内部のビデオバージョン

サードパーティのインターネットリソースに突然統合する必要があり、それを理解する時間がない場合、Seleniumが助けになります。Dmitry Kostichevは彼のプロジェクトの例で、サービスを終了せずにブラウザーでの作業を自動化する方法を説明しました。


みなさん、こんにちは。私の名前はドミトリーです。今日は、バックエンド開発でSeleniumを使用した経験を共有します。これは何のため?セレンは、一部のインターネットリソースとの対話を自動化したり、一部のデータを埋める人的要因を平準化したりするために必要です。開発の場合、これは、たとえばインターネットリソースにAPIがない場合などに必要になることがあります。そして、私のプロジェクトの例では、タスクはクライアントデータを入力し(サービスがすべての情報を正しく準備する前に)、このサイト(この場合はMasterCard)に登録することでした。



このサイトをさらに検討したところ、私たちが手を伸ばしてすべてを行うことができるAPIがないことが明らかになりました。すべての処理はJSスクリプトで実行され、何も明確ではなく、データはすべてエンコードされます。これらの目的でSeleniumを試すことを決定しました。つまり、特定の時点でこの登録を実行するサービス全体をSeleniumに固定します。

最後に、セレンとは何ですか? Seleniumプロジェクトは、特定のブラウザーのWebドライバーインターフェイスと通信するライブラリで構成されています。利用可能なライブラリとブラウザのリストがスライドに表示されています。そして今、私はそれが私のプロジェクトで大まかにどのように機能するかを示します。投稿の最後に

あるスクリーンキャストまたは詳細なビデオをご覧ください

サービスはファイルを生成し、すぐにこのサイトにアップロードして、すべてが正常に登録されているかどうかを確認します。ここで、実際には、彼は接着剤、荷重などを接着します。そして今、彼はおそらくすべてが成功するという事実に飛びつくでしょう。自動化は十分高速であり、大きなリソースを必要としません。明らかに、すべてが完全に登録されました。

これをすべて調理する方法は?Seleniumライブラリには、次のような基本的なコマンドがあります。

  • 特定のブラウザー用のインスタンスWebドライバーの作成。
  • リンクのクリック。
  • 要素の操作:クリックなど

Webドライバーを使用すると、通常のブラウザーと同様にセッションとCookieを受信できます。それらを変更して、自分用にカスタマイズすることもできます。ページでjsスクリプトを実行することもできます。 Selenideと呼ばれる、Selenium自体のこの機能を拡張するライブラリがあります。その主な機能は、インスタンスドライバーの作成を非表示にすることです。例として、openコマンドを呼び出して、何らかのリンクを指定し、ブラウザがすでに起動していることを確認します。何も設定する必要はありません。そしてライブラリは、要素、いくつかの追加のプリセットを使用して作業を拡張します。それはすべて便利に見えます、あなたはそれをすぐに理解して、それをすべて使うことができます。

オンラインリソースを使用する場合、最終的にはSeleniumを使用する場合、いくつかの設計パターンがあります。そしてそれらの1つはページオブジェクトです。その本質は、これらのすべての要素を特定のクラスで説明するという事実にあります。そして、それを再利用することができ、より簡単に見えます。これは次のようなものです。openコマンドを呼び出して、ページオブジェクトクラスを指定すると、要素を操作するなど、すべてのメソッドを使用できます。



xpath、cssなどのセレクターを使用して、HTMLページのDOMモデルで要素を検索します。たとえば、xpathとcssの間の主な違いは、xpathが「深い」だけでなく、上下に移動できることです。逆に、cssはダウンしているだけです。つまり、これらは最もよく使用されるセレクターです。



最終的には、Selenoidが直接支援できるブラウザが必要です。本質的には、ブラウザでこれらのコンテナの作成と変更を制御するフレームワークです。ただし、これらのブラウザーが大量に作成されるロードされたシステム向けに設計されています。そして私たちの状況では、これはそれほど必要ではありませんが、コンテナ自体を使用するだけです。そして今、私はこれがすでにサーバー上でどのように機能するかを示します。

実際、ページの相互作用はこのようなもので、かなり直線的なデータ処理です​​。この場合、私はステップに分かれました-ページへの移行。ここにデータが入力され、ファイルによって直接ダウンロードされます。原則として、すべてが非常に簡単です。これは、DTOをかなり連想させるpageobject-classのようなものです。たとえば、ここではPCSS Selectumの現在のケースで、要素について簡単に説明します。これはSelenideの構文です。



これが機能するには、Dockerコンテナーに接続するためのリモートドライバーの説明が必要です。そこに到達するために必要な主な設定は、使用するブラウザーと、実際にはブラウザーの解像度とその他の重要な行です。ただし、Dockerコンテナーを操作するには、ヘッドレスモードなどの設定も必要です。つまり、現在の形式では、サーバー上でスピンします。このモードでは、ブラウザーのグラフィックスが無効になるため、動作が速くなり、リソースの消費が少なくなります。

さらに、この場合はChromiumのセキュリティによって無効にされるサンドボックスではなく、独自のコード、JSなどを実行することができます。 3番目のパラメーターは、ChromiumがUNIXマシンで正常に動作し、テンポファイルを正しく記録するために必要です。実際、4番目は、ファイルをアップロードするために必要です。そして最も重要なこととして、リモートドライバーには、アプリケーションが実行されているローカルストレージから、既に削除ドライバーを介してファイルをダウンロードできるようにするフラグがあります。



次に、Dockerコンテナーでどのように機能するかを示します。 Dockerコンテナーとアプリケーション自体をダウンロードします。ほぼ同じ方法で発売されます。つまり、原則として新しいものはありません。ここでのみ、ある種のログに相互作用が表示されます。原則として、監視や作業なども行えます。したがって、発生している相互作用を理解できます。これは、ブラウザーのある場所に直接Chromiumを備えたDockerコンテナーからの出力です。



原則として、すべてがDockerコンテナーで完全に機能します。また、すべてがチェックされ、登録が正常に完了します。さらに、そのようなアプローチではどのような一般的な問題が発生する可能性がありますか?私は無知というほどの問題はありませんでした。 Dockerコンテナー内のファイル転送は、通常どおり、すべてを行います-ボリュームの回転。ただし、この場合、ローカルで実行したい場合は、プロジェクトに2つの構成が必要ですが、結局のところ、フラグを使用してリモートドライバーを構成できます。彼はこのファイルを自分で直接転送でき、追加のジェスチャーは必要ありません。

また、私たちが作業しているページ(オンラインリソース)もたどる必要があります。私の場合、これは別のシステムであり、誰も私のチームと関係がなく、これも監視したり、ログで監視したりする必要があるためです。ブラウザと同様に、常に更新されているため、監視する必要があります。サポートが終了する場合があります。まあ、原則として、なんとかしてログを設定することができ、問題はありません。

結局、どれほど簡単になりましたか?このサイトとのやり取りの問題を、jsコードを知っている場合よりもはるかに速く解決できたように思えました。つまり、セレンと相互作用を理解する方が、データがエンコードされていて、トランスコードして戻す方法がわからないという事実よりも速くなる可能性があります。主なものは開発のスピードです。

レポートビデオ-16.30から


All Articles