Необработанный отказ от обещания перед началом теста e2e с асинхронным ожиданием - PullRequest
0 голосов
/ 15 октября 2018

Я искал решение для этого предупреждения в течение нескольких недель, я искал темы с 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, но он тоже не сработал, поэтому я забираю его обратно.

Я имею в виду, что мой тестовый запуск выполнен успешно, а иногда я даже не получаю это предупреждение привсе.Но я ничего не изменил, тогда он продолжает выдавать мне эту ошибку.

Как я могу предотвратить необоснованное отклонение обещания?

...