2014-10-28 31 views
1

我無法使用量角器上傳文件。只需要填寫一個簡單的表格,然後點擊提交按鈕,然後張貼形式向不同的網址:無法使用量角器上傳文件

it('can upload file', function(){ 
    var fileToUpload = './example.txt', 
     absolutePath = path.resolve(__dirname, fileToUpload); 
     file = element(by.css('input[type="file"]')); 

    element(by.css('input[type="file"]')).sendKeys(absolutePath); 
    element(by.css('button[type="submit"]')).click().then(function(){ 
     console.log('button clicked'); 
    }); 

}); 

這裏的形式標記:

<form enctype="multipart/form-data" method="post" action="/upload" class="upload ng-pristine ng-valid"> 
    <input type="file" name="file" class="file"> 
    <button type="submit" value="Import">Upload</button> 
</form> 

這似乎從看試運行該輸入填充並點擊提交按鈕,但隨後不是張貼形式向正確的URL:

http://localhost/upload 

Chrome似乎導航到該網址,但只是說:「該網頁無法可用「在測試窗口中。手動提交表單的工作方式,發送/上傳的帖子按預期工作,並給你一個確認信息。

我想要做的只是等待上傳來處理和編寫另一個測試來檢查確認消息,但我似乎無法得到這麼多。我在這裏錯過了什麼?

回答

1

在這裏回答我自己的問題:當你有錯誤的文件路徑或名稱被髮送到文件輸入這個「找不到頁面」的錯誤是量角器將顯示,而不是任何有用的消息或指示沒有這樣的文件存在,然後再提交表單。

在我的情況下,我有錯誤的目錄,而不是「./example.txt」我需要「../example.txt」,它現在按預期工作。

+0

如果您想查看發生了什麼問題,可以將_second_參數添加到'then',這是在引發異常時調用的函數。 – avandeursen 2015-04-13 20:30:49

-1

你可以試試這個方法:

this.uploadFile = function(filename){ 
    var filetoUpload = '../attachments/'+filename; 
    var absolutePath = path.resolve(__dirname, filetoUpload); 
    $('input[type="file"]').sendKeys(absolutePath); 
};" 
0

這對我的作品。我認爲你需要setFileDetector才能在chrome中工作。

// set file detector 
var remote = require('../../node_modules/protractor/node_modules/selenium-webdriver/remote'); 
browser.setFileDetector(new remote.FileDetector()); 


var fileToUpload = '../sample.txt'; 
var absolutePath = path.resolve(__dirname, fileToUpload); 

var fileElem = element(by.css('input[type="file"]')); 

// Unhide file input 
browser.executeScript("arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", fileElem.getWebElement()); 

fileElem.sendKeys(absolutePath); 

// take a breath 
browser.driver.sleep(100); 

// click upload button 
element(by.css('button[data-ng-click="uploadFile(file)"]')).click(); // does post request