无法使用量角器上传文件

时间:2014-10-28 15:22:11

标签: angularjs protractor

我没有用量角器上传文件的运气。只需要填写一个简单的表单并单击一个提交按钮,然后将该表单发布到另一个URL:

  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似乎导航到该网址,但只是说&#34;网页不可用&#34;在测试窗口中。手动提交表单有效,发布到/上传按预期工作,并给您一个确认消息。

我想要做的只是等待上传处理并编写另一个测试以检查确认消息,但我似乎无法做到这一点。我在这里缺少什么?

3 个答案:

答案 0 :(得分:1)

在这里回答我自己的问题:当您将错误的文件路径或名称发送到文件输入时,此“找不到页面”错误是量角器将显示的,而不是任何类型的有用消息或指示没有此类文件在您提交表单之前存在。

在我的情况下,我有错误的目录,而不是“./example.txt”我需要“../example.txt”,它现在按预期工作。

答案 1 :(得分: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

答案 2 :(得分:-1)

您可以尝试这种方法:

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