Javascript 如何在数组中传递文件名,然后在cypress中迭代文件上载功能

Javascript 如何在数组中传递文件名,然后在cypress中迭代文件上载功能,javascript,cypress,Javascript,Cypress,我正在尝试创建一个for循环,在这个循环中,我将使用beforeach传递列表中的所有文件,然后我希望迭代列表,以便通过api调用上载文件 我已将所有文件放在cypress/fixture/files文件夹下 我想将fixture/files文件夹下的文件添加到数组中,如下所示: beforeEach(() => { cy.fixture('files/').as('files') }); 然后我想迭代文件数组,通过api调用上传文件 我使用以下代码进行迭代: cy.wrap(fil

我正在尝试创建一个for循环,在这个循环中,我将使用beforeach传递列表中的所有文件,然后我希望迭代列表,以便通过api调用上载文件

我已将所有文件放在cypress/fixture/files文件夹下

我想将fixture/files文件夹下的文件添加到数组中,如下所示:

beforeEach(() => {
  cy.fixture('files/').as('files')
});
然后我想迭代文件数组,通过api调用上传文件

我使用以下代码进行迭代:

cy.wrap(files).each((index) => {
  const fileName = files[index];
当我尝试使用上面的代码时,我得到下面的错误。我不确定我是否使用了正确的方法


我不确定这是否解决了问题,但您使用别名的方式不正确。您需要
cy.wait('@files')
来获取别名的值
cy.get('@files')
也是正确的语法,但在这里不起作用,因为
cy.fixture()
从磁盘读取数据(因此必须等待它完成)

由于您在加载文件后直接使用这些文件,因此请去掉别名并使用
.then()
等待

/*
  Fixture file contains:
  { 
    "uploadFilePng": "files/cypressFileUpload.png", 
    "uploadFileDmg": "files/cypressFileUpload.dmg", 
    ...
  }
*/

cy.fixture('files/cypressFileUpload').then(files => {
  const fileNames = Object.values(files);
  cy.wrap(fileNames).each(fileName => {
    console.log(fileName); // should see "files/cypressFileUpload.png", "files/cypressFileUpload.dmg"
    ...

我尝试了上述方法,但仍然出现错误“cy。each()只能对类似于subject的数组进行操作。您的subject是:@files,因为此错误发生在每次挂接之前,我们将跳过当前套件中的其余测试:Upload File”这将取决于您在
文件/cypressFileUpload
中的内容。假设它是一个json数组?是的,它是一个json数组,内容为:{“uploadFilePng”:“files/cypressFileUpload.png”,“uploadFileDmg”:“files/cypressFileUpload.dmg”,“uploadFilePkg”:“files/cypressFileUpload.pkg”,“uploadFileHtm”:“files/cypressFileUpload.html”,“uploadFileDocx”:“files/cypressFileUpload.docx”,“uploadFileJar”:”:“files/cypressFileUpload.jar”、“uploadFilePdf”:“files/cypressFileUpload.pdf”、“uploadFileJpg”:“files/cypressFileUpload.jpg”、“uploadFileXlsx”:“files/cypressFileUpload.xlsx”、“uploadFileZip”:“files/cypressFileUpload.zip”}好的,实际上这是一个json对象——处理略有不同。