Я искал решение для этого предупреждения в течение нескольких недель, я искал темы с github или stackoverflow, но решения не давали мне покоя никогда или временно.Так что я открыл эту тему, пожалуйста, не сердитесь на меня, я застрял.
Я пишу e2e-тест с асинхронным ожиданием в AngularJs.
Я отменил поток управления с помощью: SELENIUM_PROMISE_MANAGER: false
это мой login.Spec тестовый файл для тестирования страницы входа:
var LoginPage = require('../pages/login.page.js');
describe('Testing Login Page', function (){
const EC = protractor.ExpectedConditions;
var loginPage = new LoginPage();
beforeAll(async () => {
await loginPage.get().catch((e)=>{
console.log(e);
})
await loginPage.login().catch((e)=>{
console.log(e);
})
});
it('there should be user name and user password area',async () => {
expect(await $('[ng-model="user.name"]').isPresent()).toBe(true);
expect(await $('[ng-model="user.password"]').isPresent()).toBe(true);
});
it('there should be login button',async () => {
expect(await $('[test-id="loginSubmit"]').isPresent()).toBe(true);
});
});
это мой login.page.js для функций get и login:
let LoginPage = function(){
const EC = protractor.ExpectedConditions;
this.get = async ()=>{
await browser.get(`${browser.baseUrl}`);
await browser.wait(
EC.presenceOf(element(by.css('.container.login'))), 30000,
'Waiting too long to open login page'
)
}
this.login=async ()=>{
await $('[ng-model="user.name"]').clear().sendKeys(browser.params.login.user);
await $('[ng-model="user.password"]').clear().sendKeys(browser.params.login.password);
const loginSubmit = await $('[test-id="loginSubmit"]');
await loginSubmit.click();
}
}
module.exports = LoginPage;
это моя часть конфигурации экспорта в protractor.config.js:
framework: 'jasmine',
specs: ['../test/e2e/specs/*Spec.js'],
SELENIUM_PROMISE_MANAGER: false,
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 900000 //for timeout error: timed out after 30000 msec waiting for spec to complete
},
getPageTimeout: 900000, //for Error: Timed out waiting for page to load after 10000ms
//for Error: Angular could not be found on the page: retries looking for angular exceeded
allScriptsTimeout: 900000, //for Error: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds.
//for ScriptTimeoutError: asynchronous script timeout: result was not received in 11 seconds
multiCapabilities: [{
browserName: 'chrome',
chromeOptions: {
args: ["--window-size=1368,700" ]
}
}],
onPrepare: ()=>{
jasmine.getEnv().addReporter(new HtmlReporter({
baseDirectory: 'test/e2e/results/',
screenshotsSubfolder: 'images',
jsonsSubfolder: 'jsons',
takeScreenShotsOnlyForFailedSpecs: true,
preserveDirectory: false,
docName: 'index.html' ,
cssOverrideFile: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'
}).getJasmine2Reporter());
},
это версия тестовых пакетов в package.json:
"jasmine": "^3.0.0",
"jasmine-core": "^3.0.0",
"jasmine-reporters": "^2.0.0",
"jquery": "^3.2.1",
"karma": "^2.0.0",
"karma-chrome-launcher": "^2.2.0",
"karma-jasmine": "^1.1.1",
...
"protractor": "^5.4.0",
"protractor-beautiful-reporter": "^1.1.1",
...
Наконец, вот моя ошибка.Я запускаю e2e и до того, как все выдаст мне эту ошибку, а затем он запускает селен:
.. [10:43:11] I / update - chromedriver: unzipping chromedriver_2.42.zip (узел:17016) UnhandledPromiseRejectionWarning: Ошибка: EPERM: операция не разрешена, переименуйте 'C: \ ProjectPath \ node_modules \ protractor \ node_modules \ webdriver-manager \ selenium \ chromedriver.exe' -> 'C: \ ProjectPath \ node_modules \ protractor \ node_modules \ webdriver-manager \ selenium \ chromedriver_2.42.exe 'в Object.fs.renameSync (fs.js: 766: 18) при распаковке (C: \ ProjectPath \ node_modules \ protractor \ node_modules \ webdriver-manager \ built \ lib \ cmds \update.js: 235: 8) по адресу files_1.FileManager.downloadFile.then.downloaded (C: \ ProjectPath \ node_modules \ protractor \ node_modules \ webdriver-manager \ built \ lib \ cmds \ update.js: 205: 13) по адресуprocess._tickCallback (internal / process / next_tick.js: 188: 7) (узел: 17016) UnhandledPromiseRejectionWarning: необработанное отклонение обещания.Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch ().(идентификатор отклонения: 1) (узел: 17016) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели.В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.Blockquote
Хорошо, я пытался ставить блок catch после каждого теста, но он показался мне не очень хорошим и не нашел решения.Я сделал когда-либо функционировать, на асинхронных и поставить перед каждым оператором ждать.Я попытался удалить browser.wait () в блоке кода beforeAll, но он тоже не сработал, поэтому я забираю его обратно.
Я имею в виду, что мой тестовый запуск выполнен успешно, а иногда я даже не получаю это предупреждение привсе.Но я ничего не изменил, тогда он продолжает выдавать мне эту ошибку.
Как я могу предотвратить необоснованное отклонение обещания?