2017-09-26 5 views
5

私はWebdriverIOでNode.jsのためにセレンwebdriverを宝石でルビーからポートに次のコードをしようとしている使用してファイルをアップロードする方法:WebdriverIO

@webdriver.navigate.to "https://imgur.com/upload" 
element = @webdriver.find_element(:id, 'global-files-button') 
element.send_keys("C:\\test\\image.png") 

あなたがコードを見ることができるように非常に簡単です:URLにナビゲートし、入力を見つけ、ファイルパスを設定し、アップロード用のファイルを選択して期待どおりに動作します。

これは私の移植版である:

describe('User can upload',() => { 
    it('select file',() => { 
    browser.url("https://imgur.com/upload"); 
    browser.waitForExist('#global-files-button'); 
    $('#global-files-button').keys("C : \\ t e s t \\ i m a g e . p n g".split(" ")); 
    }); 
}); 

残念ながら、このテストがパスを設定していないと私はwdioで、このようなファイルをアップロードする作業例を見つけることができていないと、ドキュメントがあり私は推測を残しました。どんな提案も大歓迎です。

私はchooseFileとuploadFileの両方を認識していますが、私はwdioテストを実行するためにクラウドプラットフォームを使用していますが、信頼性が高いとは思われません。

答えて

2

を働く私はこれで問題がありました。私が調べたことから、WebdriverIOやchooseFile()やuploadFile()メソッドの問題ではありません。私が信じる問題の根源は、Selenium Webdriverが「複数の」<input type='file' multiple>アップロード要素を処理できないというエラーになります。

私は多分3日、このgithubの問題全体につまずく前に、固体のためにこれを戦っ:

https://github.com/SeleniumHQ/selenium-google-code-issue-archive/issues/2239

かいつまんで、imgur上のHTMLは、その上に「複数の」性質を持っているため、アップロードのテストはしません正しく動作します。 WebdriverIO/Seleniumは私が気づいたことから機能しなくなります。

注:<input type='file' multiple>をテストしている間に、実際にアプリケーションで1つのファイルをアップロードしてシステムとアプリケーションにファイルを追加することができました。しかし、問題はWebdriverIOとSeleniumが停止することです。テストは終了し、成功または失敗の結果は報告されません。

あなたが行くとあなたが正しくWebdriverIO関数からchooseFile()メソッドを作ることができるはず「複数」アップロード入力フィールドとして指定されていないウェブ上のどこか別の<input type=file>要素をテストする場合。

私はこれがあなた、そしておそらくファイルアップロードに苦労している他の誰かに役立つことを願っています。

EDIT: 私はあなたのサンプルを作ろうとしましたが、 "chooseFile()"で成功し、 "filepath"を直接渡しました。おそらくあなたは本当にする必要がないときにキーボードコマンドを送信しようとしていますか?アップロードしようとしている画像への直接のファイルパスがありますか?以下は、ファイルを正常にアップロードするために使用できたものです。

it('upload a file to imgur', function() { 
    browser.url("https://imgur.com/upload"); 
    browser.waitForExist('#global-files-button'); 
    browser.chooseFile('#global-files-button', '/insert/path/to/image.png') 
}) 
2
// c:/test/image.png 
var test1 = 'c:/test/image.png' 
var path = test1.split('/').join('\\\\') 
browser.addValue('[name="fileField"]', path) 

または多分これはまた

// c:\test\image.png 
var path = 'c:\\test\\image.png' 
browser.addValue('[name="fileField"]', path) 

または多分これ

// c:/test/image.png 
var path = 'c:/test/image.png' 
browser.addValue('[name="fileField"]', path) 
関連する問題