2017-05-25 32 views
0

リモートSeleniumサーバーインスタンスを使用して、ファイルシステムからファイルをアップロードする方法をテストするにはどうすればよいですか?リモートのSeleniumサーバーを使用している場合、そのサーバーはローカルファイルシステムの内容をどのように見ることができますか?リモートSeleniumサーバーを使用してファイル選択ダイアログを使用してファイルをアップロードする

たとえば、Webインターフェイス経由でファイルをAPIサーバーにアップロードする必要があります。だからSeleniumはWebインターフェイスをシミュレートしますが、Seleniumはリモートサーバー上で動作しているので、Seleniumはファイルシステム上のファイルをどのように見ることができますか?

+0

セレンは自動的にファイルwをアップロードしますメソッド 'sendKeys'は' 'DOM要素の有効なファイルパスで呼び出されます。しかし、クライアントに応じて、ファイル検出器をセットアップする必要があります。 –

答えて

2

どのようにあなたはセレン(フレームワーク&など)を使用しているかによって異なりますが、基本的にセレンを呼び出すと、セロニアムリモートサーバーにHTTP POSTリクエストを行い、ローカルファイルをパラメータとして送信します。

を追加します:

あなたがここにPythonのフレームワークを確認する場合 - あなたは、この機能は、それがファイルであることを理解していればsend_keys機能に

をファイルへのパスを書き、「ローカル」のコードで https://github.com/SeleniumHQ/selenium/blob/fec87ea8c2a4704bd1e7bcddf9a98e400823ef4e/py/selenium/webdriver/remote/webelement.py

local_file = self.parent.file_detector.is_local_file(*value) 

あなたは_uploadが

https://github.com/SeleniumHQ/selenium/blob/fec87ea8c2a4704bd1e7bcddf9a98e400823ef4e/py/selenium/webdriver/remote/remote_connection.py

を実行コマンドを見つけることができます - それはzip圧縮し、それをエンコードし、

と、次の関数に次のファイルで

return self._execute(Command.UPLOAD_FILE, {'file': content})['value'] 

を渡す

同じファイルに
def execute(self, command, params): 

Command.UPLOAD_FILE: ('POST', "/session/$sessionId/file") 
+0

右ですが、「ローカル」ファイルは、Webブラウザでファイル選択ダイアログを使用した場合のファイルへの絶対パスです。 –

+1

はい、この絶対パスではなく、ファイル自体をseleniumサーバーに送信しています。ポスト要求を介してファイルを取得しているセレンは、それから一時ファイルを作成し、ドライバーは一時ファイルをアップロードしてテストしているWebサイトの形式にします。 – SAZ

+0

hmm、ok、これはセレンでどのように行われているかを示すリンクがありますか? –

関連する問題