2017-04-18 12 views
0

現在、SeleniumとPythonは自動的にファイルをWebサイトにアップロードしています。私はいつもFirefoxのブラウザを使って自分のコードをテストしています。そのような方法で私は何が起こっているのかを見ることができるからです。すべての問題は解決しました。イメージはそれをアップロードし、結果は見えます。しかし、私はブラウザを変更します。 PhantomJSを使用すると、send_keysを要素(ファイルアップロード要素)に置くと要求が停止するようです。 Firefoxはこれを処理する問題がない理由を私は理解していないPhantomJSを使用してキーを発行しますが、Firefoxでは使用できません

'''Image Upload''' 

upload_photo_element = driver.find_element_by_xpath(upload_photo_field_ID) 
image = os.path.join(os.getcwd(), 'images/' + 'img.png') 
upload_photo_element.send_keys(image) 

time.sleep(5) 

upload_photo_reject_button_element = WebDriverWait(driver, 10).until(
lambda driver: driver.find_element_by_id(upload_photo_reject_button_ID)) 
upload_photo_reject_button_element.click() 

'''End image upload''' 

は、私は、次のコードを使用します。しかし、PhantomJSはそうします。

これはなぜ起こっているのですか?

ありがとうございました。

+0

ウェブサイトのパブリックですか?そうでない場合は、HTMLを投稿できますか? –

答えて

0

PhantomJSを使用していると、あなただけではありません。troubleuploadingfilesです。

入力フィールドは表示されていますか?一部のサイトでは、入力フィールドを非表示にして、スタイルに合わせて別の要素を表示します。そうすることでIE11でファイルをアップロードできなくなる - PhantomJSは同じかもしれない。あなたはフィールドを最初に見えるようにすることができます。どのようにそれを行うかは、それがどのように見えなくなったかによって異なります。それが隠されていないことを確認し、それを隠すCSSスタイルは適用されません。

Someone else suggested another workaround:uploadFileはPhantomJSで壊れているので

、あなたはそれを使用しないようにする必要があります。その方法は、PhantomJSがテストと同じマシンで実行されているかどうかによって異なります。

ローカルの場合は、PhantomJSドライバを直接使用できます。リモートドライバを使用する必要がある場合、またはPhantomJSがリモートで実行されている場合は、ドライバがローカルで実行されているかのように動作するようにパッチを適用する必要があります。

Python Webドライバでは、Webドライバの_is_remote属性をFalseに設定します。ソースを参照してください。あなたのコードは次のようになります。

is_remote = webdriver._is_remote 
webdriver._is_remote = False 
webdriver.find_element_by_css_selector('input').send_keys(filepath) 
webdriver._is_remote = is_remote 
+0

あなたの返信ありがとうございます@マークラピエール。私はこれを「リモートウェブドライバ」でテストする必要がありますか?あなたのコードをコピーすると、._is_remote属性がwebdriverに存在しないというエラーが発生するためです。 – user3138008

+0

入力フィールドが非表示になっていません。そして、「ファイルをアップロードする際のトラブル」という記事は、私の問題に合っているようです。 – user3138008

+0

これはnpm、python 3.5.2、およびselenium 3.3.3のphantomjs-prebuilt 2.1.14で動作します。 PhantomJS、Python、Seleniumのどのバージョンを使用していますか?また、「ファイルをアップロードする際のトラブル」は、実際には3つの別々のリンクです。各単語はリンクです。他のリンクの1つが役に立ちます。 –

関連する問題