如何在量角器中上传多个带有多个上传按钮的文件?

时间:2017-01-15 16:29:32

标签: angularjs testing protractor

  var path = require('path'),    
  uploadInput = element(by.css("input[type=file]")),   
  fileToUpload = "../../download.jpeg",    
  absolutePath = path.resolve(__dirname, fileToUpload);    
  uploadInput.sendKeys(absolutePath);                
  $('input[type="file"]').sendKeys(absolutePath);

以上工作正常,对于一个文件。我需要在一个页面中测试多个文件上传按钮和多个文件上传按钮。如何将不同的文件传递给每个相应的文件上传按钮?

2 个答案:

答案 0 :(得分:1)

选择所有文件上传按钮 - 使用元素阵列查找器element.all()$$()并迭代所有输入元素以上传文件

有关详细信息,请参阅here

我建议使用下面的方法,您可以将所有文件映射到相应的文件类型。

我假设您的输入元素上有一个指示符 - 以属性的形式 - label,但您可以根据您的要求对其进行修改。

var files ={
    textFile: '../../download.txt',
    pdfFile: '../../pdf.pdf',
    jpgFile: '../../download.jpeg'
}
element.all(by.css('input[type="file"]')).then(function(inputElements) {
    return inputElements.forEach(function(inputElement) {
        return inputElement.getAttribute('label').then(function(fileType){
            return inputElement.sendKeys(path.resolve(__dirname, files[fileType]));
        });
    });
});

答案 1 :(得分:0)

这里要考虑几件事。

1)你只有一个" absolutePath" - 如果您要一次处理多个文件,您可能需要为每个文件定义一个路径。

2)使用$("input[type='file']")将选择DOM中的所有文件输入。如果您希望能够对单个文件输入进行操作,则需要为每个文件设置选择器,然后使用唯一ID选择每个文件:

$("#file1").sendKeys(etc..
$("#file2").sendKeys(etc..