2016-04-29 4 views
0

を使用して、以下の追加の弾丸があるオープン窓からテストにファイルをアップロードする方法:私は次のコードで私の「ボタン」を得ることができ :セレン::リモート::ドライバーPerlパッケージ

$elem = $driver->find_element('//*[@id="file_uploader"]/div/div/div/div[1]/div[1]/div/span'); 
    $driver->mouse_move_to_location(element => $elem); # xoffset => x, yoffset => y 
    $driver->click_ok('LEFT'); 
    $driver->pause(3000); 

をしかし、その後、私は表示されたOpened Windowで何も取得できません。ファイルをアップロードするにはどうすればいいですか?

PS:ここで私の開発ツールのスクリーンショットです。事前に

In Blue

ありがとう!

+2

xpost ... http://www.perlmonks.org/?node_id=1161872 – toolic

答えて

2

セレンはOSのダイアログを処理できません。したがって、このダイアログに対処する方法はありません。つまり、ファイルを開くことなくアップロードする必要があります。 幸いなことに、Seleniumはファイルパスをファイル入力に送ることができます。これでファイルがアップロードされます。

最初にボタンの代わりに入力要素を探す必要があります。あなたがテキストフィールドに任意のテキストを送信しますようにあなたがそれにファイルパスを送ることができ、この要素を見つけたら

<input type='file'> 

:それは次のようになります。私はperlでこれを実行するかどうかはわかりませんが、Pythonでは、あなたはこのようにそれを達成することができます:あなたはおそらく、Perlの同等が何であるかを自分自身を知っているよ

element.send_keys('path/to/file') 

+1

非常に良い答え:私はあなたにここに追加のスクリーンショットを転送しています。これを改善するには、Perlでそれを行う方法についての[このドキュメントへの参照](https://metacpan.org/pod/Selenium::Remote::Driver#upload_file)を追加してください。 :) – simbabque

+0

代わりに入力がありません。どうすれば違うのですか? – Chaoui05

+1

@ Chaoui05あなたは元の質問を編集し、関連するHTMLを追加することができます。あなたにそれを手助けする方が簡単でしょう。 – RemcoW

0

実際、もっと具体的です。 Webアプリケーションにファイルをアップロードするには、次の2つの方法があります。

最初のユーザーは 'ファイルを選択'ボタンを使用できます。

ファイルを直接ドロップすることができます。 2番目の方法で、ここで提案されているように、Selenium :: Remote :: Driverパッケージで "upload_file"メソッドを使用することは可能です。私はそれをする:

my $fname = "D:/dev/tests/selenium/phantomjs-2.1.1-windows.zip"; 
my $remote_fname = $driver->upload_file($fname); 
    my $element = $driver->find_element('//*[@id="file_uploader"]/div/div/div/div[1]/div[2]/input[@class="dx-fileuploader-input"]'); 
    $element->send_keys($remote_fname); 

私の "ボタン"ではなく。

どうすれば可能ですか?

In red 'button' and blue 'drop file'

関連する問題