异步等待状态下未处理的诺言拒绝beforeAll在e2e测试中进行了

时间:2018-10-15 08:12:19

标签: promise async-await jasmine e2e-testing angularjs-e2e

我已经在寻找警告的解决方案已有好几个星期了,我看起来是一个令人沮丧的github或stackoverflow主题,但是解决方案却给我带来了永远的和平或短暂的平静。所以我打开了这个话题,请别对我生气,我被困住了。

我正在AngularJs中编写异步等待的e2e测试。

我通过以下方式取消了控制流:SELENIUM_PROMISE_MANAGER: false

这是我的登录名。用于测试登录页面的规范测试文件:

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:

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]我/更新-chromedriver:解压缩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。然后下载(C:\ ProjectPath \ node_modules \ protractor \ node_modules \ webdriver-manager \ built \ lib \ cmds \ update.js:205:13)       在       在process._tickCallback(内部/进程/next_tick.js:188:7)(节点:17016)UnhandledPromiseRejectionWarning:未处理的承诺   拒绝。该错误是由抛出异步内部引起的   没有捕获块或拒绝承诺   未使用.catch()处理。 (拒绝ID:1)(节点:17016)[DEP0018]   DeprecationWarning:已弃用未处理的承诺拒绝。在   未来,未处理的承诺拒绝将终止   使用非零退出代码的Node.js进程。   引用

好吧,我尝试在每次测试后都放置catch块,但这似乎并不好,并且没有得到解决方案。 我曾经使函数处于异步状态,并在每条语句等待之前放置。 我试图在beforeAll代码块中删除browser.wait(),但是它也没有起作用,所以我将其取回。

我的意思是说我的测试运行成功,有时甚至根本没有得到这个警告。但是我什么也没改变,但它一直给我这个错误。

如何防止未处理的承诺被拒绝?

0 个答案:

没有答案