Ich versuche, einen Ordner zu erstellen, um die von Cypress aufgenommenen Screenshots in einem benutzerdefinierten Ordner innerhalb der Screenshots zu speichern, wobei im ScreenshotFolder-Ordner ein neuer Ordner mit einem Ordner mit Datumsangaben vorhanden ist, aber es funktioniert nicht.
Das Problem ist, dass, wenn der Code run.cypress() ausgeführt wird, am Ende die von mir eingegebene Route geändert wird und die Standardroute beibehalten wird.
Der Code kann wie folgt ausgeführt werden:
const cypress = require('cypress'); const fs = require('fs'); const path = require('node:path'); //Function that create the test run var createRunTest = async function (info, folderNameResults){ //Datetime will be modified every time that the function is called var datetime2 = new Date(); //test start date datetime2 = datetime2.toISOString().slice(0, 19).replace('T', '_'); datetime2 = datetime2.replace(/:\s*/g, '_'); //Then I create the folders of the results for reports and screenshots with the number of execution and his datetime //Creation datetime folder in reports (time it runs) var reportsFolder = path.join(__dirname, 'cypress', 'reports', folderNameResults, cronInfo.execution_num + '_' + datetime2); fs.mkdir(reportsFolder, (err) => { if (err) { if (err.code == 'EEXIST') return console.error("file exist"); return console.error(err); } }); //Creation datetime folder in screenshots (time it runs) var screenshotsFolder = path.join(__dirname, 'cypress', 'screenshots', folderNameResults, info.execution_num + '_' + datetime2); fs.mkdir(screenshotsFolder, (err) => { if (err) { if (err.code == 'EEXIST') return console.error("file exist"); return console.error(err); } }); console.log("It should be: ", screenshotsFolder); let results = await cypress.run({ browser: 'chrome', configFile: __dirname + '/cypress.config.js', spec: __dirname + '/cypress/e2e/investigation/testWeb.cy.js', //put your test here reporter: "cypress-multi-reporters", reporterOptions: { "reporterEnabled": "mochawesome", "mochawesomeReporterOptions": { "reportDir": reportsFolder + "/json/", "overwrite": false, "html": false, "json": true } }, videosFolder: __dirname + '/cypress/videos', screenshotsFolder: screenshotsFolder, }); console.log("But it is this", results.config.screenshotsFolder); info.execution_num += 1; return; } //Here i have information of execution times var info = { id: 1 created: new Date().toISOString().slice(0, 10), execution_num: 0, //execution number } var folderNameResults = info.id + '_' + info.created; //here i create a folder with folderNameResults in directories "cypress/reports/ and cypress/screenshots" //i.e. remaining as follow: cypress/reports/1_05_17_2023 (and the same with screenshots) fs.mkdir(__dirname + '/cypress/reports/' + folderNameResults, (err) => { //creation in REPORTS if (err) { if (err.code == 'EEXIST') return console.error("file exist"); return console.error(err); } }); fs.mkdir(__dirname + '/cypress/screenshots/' + folderNameResults, (err) => { //creation in SCREENSHOTS if (err) { if (err.code == 'EEXIST') return console.error("file exist"); return console.error(err); } }); //Then i call the function to create a execution test console.log("FIRST EXECUTION"); //increment +1 execution number (1) createRunTest(info, folderNameResults).then( () => { console.log("SECOND EXECUTION"); //increment +1 execution number (2) createRunTest(info, folderNameResults); });
Bei der ersten Ausführung zeigt die Ausgabe, dass es nicht funktioniert:
It should be: C:\Users\xeom\Desktop\Ayudantia\v2_script\script/cypress/screenshots/1_2023-05-17/0_2023-05-17_19_32_30 But it is this C:\Users\xeom\Desktop\Ayudantia\v2_script\script\cypress\screenshots
Was also passiert, ist wie folgt:
Die Datei mit der Aufzeichnung für jede Ausführung wird außerhalb des von Ihnen erstellten Ordners gespeichert und auch im Ordner testWeb.cy.js überschrieben (jeder Ausführungsordner sollte einen Ordner mit diesem Namen haben). < /p>
Außerdem können wir anhand der Berichte sehen, dass es wirklich gut funktioniert.
Wie kann ich das Problem beheben?
Wandille 是正确的,您只是将配置设置在错误的位置 - 所以我怀疑您正在努力学习基础知识。
我建议使用
before()
设置屏幕截图路径,这样更改不仅适用于模块 API 调用,还适用于cypress run
和cypress open
。注释:
您想要的额外路径
myScreenshotsFolder
会自动添加到基本路径cypress/screenshots
您的测试定义文件名
cy.screenshot('some-file-name')
将使用它,否则使用测试标题。这遵循赛普拉斯当前的惯例。before()
应放入cypress/support/e2e.js
文件以供全局使用screenshotsFolder
应位于config
部分代码来源