2011-12-29 16 views
29

でファイル(写真)をアップロードするにはセレンのテストツールを使ってWeb画像にアップロードする方法はありますか?私はPythonを使用しています。セレン、python

私は多くのことを試しましたが、何も動作しませんでした。私は絶望的です。

アップロードは次のようになります。

http://img21.imageshack.us/img21/1954/uploadgr.jpg

あなたの助け

フィリップいただきありがとうございます。

+0

私は[pythonを使用してここに回答] [1]を投稿しました。 [1]:http://stackoverflow.com/a/11872608/471376 – JamesThomasMoon1979

答えて

4

Upload inputコントロールはネイティブダイアログ(ブラウザで行われます)を開き、Selenium経由でコントロールまたはブラウズボタンをクリックするとダイアログがポップアップし、テストがハングします。

回避策は、JavaScriptを使用してアップロード入力の値を設定することです(JavaではJavascriptExecutorを使用して行います)。次にフォームを送信します。

は、C#でのサンプルのためthis questionを参照してください、私がやっている私はPythonでJavaScriptを呼び出す方法もあります確信しているが、私はセレンのPythonバインディングに

+0

これは、有効な解決策ではない、https://stackoverflow.com/questions/29720794/jquery-select-input-を参照してくださいファイルと他の入力を別の入力とする – Will

79

を使用したことがない。この(DRVがwebdriverをのインスタンスであることを確認しています):

drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png") 

あなたの送信ボタンを見つけてクリックしてください。

+7

これは受け入れられる回答でなければなりません。 –

+0

はいこれが受け入れられる回答である必要があります! –

+0

あなたは、 'os.getcwd()'がやっていることと、あなたのファイルシステムに 'image.png'がどこにあるのかを詳しく教えてください。 – ChickenFeet

4

これらのアプローチはすべて、現代の画像アップローダーでは機能しません。 (Windowsのみ) 代替アプローチ

1. Automation of windows can be done using Autoit 
2. Install Autoit and SciTe Script editor 
3. Autoit code :(imageupload.au3) 

WinActivate("File Upload"); for chrome use "open" that is the name of the window that pops 
send("D:\images\image1.png"); path of the file 
Send("{ENTER}") 

4. compile it to get an .exe file(imageupload.exe) 
5. Now from python call the .exe file like 

import os 
import os.system('C:\images\imageupload.exe') #path of the .exe file 
+0

あなたは明確な例を挙げることができます、あなたはexeファイルをインポートしますか、それを正確にどのように呼びますか? – 2one2

+0

私が第3のポイントで与えた3行の新しいautoitファイルを作成します。これを参照して.exeファイルに変換してください。https://www.autoitscript.com/autoit3/docs/intro/compiler.htm次に、5番目の点で与えた2行を使用してpythonスクリプトからexeファイルを呼び出すことができます – saravanan

0

私は、画像をアップロードするスクリプト形式の下に使用されてきました。これはあなたを助けるかもしれません。

Imagepath=os.path.abspath('.\\folder1\\subfolder2\file1.jpg') 
    driver.find_element_by_id("Id of the element").clear()    
    driver.find_element_by_id("Id of the element").send_keys(Imagepath) 

オブジェクトのIDがない場合は、それに応じてxpathまたはcssセレクタを使用できます。

elm = driver.find_element_by_xpath("//input[@type='file']") 
    elm.send_keys(os.getcwd() + "/tests/sample_files/Figure1.tif") 

ませフォームの送信をまたはキーが私の場合には必要とされている入力します。

1
import win32com.client 

shell = win32com.client.Dispatch("WScript.Shell") 
shell.Sendkeys("C:\text.txt") 
shell.Sendkeys("~") 

は私がfine-uploader使用しています問題

+0

こんにちは私はあなたの助けが必要です、私は画像ファイルをアップロードしようとしていますが、このコードを使用しようとしていますが、イベントやタブキーを入力しないとfile.itsを選択できません。手伝ってくれませんか? –

0

、pytestでSeleniumテストを実行すると、これは私のために働いたに解決しません。

ありがとうございました!それは多くの助けになりました!破片使用

0

browser.attach_file( 'file_chooser_id'、fully_qualified_file_path)

1

は私が迷惑msofiledialogsと契約を使用するためにお探しの方のための答えを追加しました。これはsaravananの提案された解決策に取り組んでいますが、Pythonのためにもっと盛り上がっています。

私は同じ側の会社のスクリプトに似た問題がありました。私は会社のクライアントのために文書をアップロードしようとしていますが、サイトの仕組みによってsend_keysを直接利用することができず、msofiledialogに依存しなければなりませんでした。

  1. は、あなただけのAutoIt https://pypi.python.org/pypi/PyAutoIt/0.3インストールする必要があるか、ちょうどあなたのスクリプトのページ

  2. タイプにcmdを画面

  3. タイプ "輸入のAutoIt" を通じて次のことを "-U pyautoitインストールPIP"ファイルダイアログがスクリプトでポップアップする前に:

    autoit.win_active( "開く") autoit.control_send( "開く"、 "編集1"、r "C:\ユーザー\ uu \デスクトップ\ TestUplo ad.txt ") autoit.control_send(" オープン」、 "EDIT1"、 "

それは、オープンファイルダイアログウィンドウを探し、それを記入し、押しが入ります)" {ENTER}。 "開く"は私のファイルダイアログ画面のタイトルです。 「開く」の代わりにあなたのタイトルを入れてください。 AutoItの機能を利用するためのより創造的な方法がありますが、これは初心者にとって簡単で簡単な方法です。

編集:しないでください。あなたがそれを避けることができれば、ほとんどのものに対してcontrol_sendを使用しないでください。誤ったテキストを送信することはよく知られています。私の場合、ファイルパスのコロンはセミコロンに変わっていました。入力キーを送信する必要がある場合は、それでも問題はありませんが、テキストを送信する必要がある場合はcontrol_set_textを使用してください。それは同じ構文をしています。

関連する問題