运行Protractor测试的Jenkins不会创建任何报告

时间:2016-08-11 10:55:16

标签: batch-file selenium jenkins protractor

我有一个Jenkins项目,它首先运行一个批处理文件,运行一个selenium服务器供Protractor使用。然后它运行第二个批处理文件,以便通过Protractor运行测试。

如果我手动执行批处理文件并通过Mocha生成报告,则运行这些测试可以正常工作。但是,如果我通过Jenkins运行这些批处理文件,则不会创建任何报告。

这是我的配置:

var today = new Date().toJSON().slice(0, 10);

exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    rootElement:     '[ng-app]',

    allScriptsTimeout: 80000,

    // resultJsonOutputFile: './Report.json', // adds a JSON file from protractor test reults


    framework: 'mocha',
    mochaOpts: {
        reporter:        'mochawesome-screenshots',
        reporterOptions: {
            reportDir:            'reports/' + today + '/',
            reportName:           'DOCS Dev QA Automation' + today, // TODO: Enter desired report name
            reportTitle:          'DOCS Dev QA Automation', // TODO: Enter desired report title
            takePassedScreenshot: false,
            clearOldScreenshots:  true
        },
        timeout:         60000
    },

    specs: [ 'yadda_runner.js' ],

    capabilities: {
        browserName:   'chrome',
        chromeOptions: {
            args: [ '--lang=en',
                '--window-size=1280,1024' ]
        }
        //browserName: 'firefox'
    },

    // Runs on start up and logs in to Docs
    onPrepare: function() {



        browser.ignoreSynchronization = true;
        browser.driver.get(browser.params.baseUrl);

        browser.driver.findElement(by.id('sign_in')).click();
        browser.driver.switchTo().frame('loginframe');

        browser.driver.findElement(by.id('userName')).sendKeys(browser.params.login.username);
        browser.driver.findElement(by.id('verify_user_btn')).click();

        // TODO: see if there is a better way to wait for this, unfortunately the browser.driver.wait isElementPresent doesn't seem to work
        browser.driver.sleep(2000); // wait for password field to be visible

        browser.driver.findElement(by.id('password')).sendKeys(browser.params.login.password);
        browser.driver.findElement(by.id('btnSubmit')).click();

        // Wait for login to complete
        return browser.driver.wait(function () {
            return browser.driver.getCurrentUrl().then(function (url) {
                return /projects/.test(url);  // tests that the current URL contains the word 'projects'
            });
        }, 60000);

    },

    // Runs on exit and logs out of Docs
    onComplete: function() {
        browser.driver.findElement(by.css('.header__control.header__control--profile')).click();
        browser.driver.findElement(by.css('body > div > div > header > div > ul > li:nth-child(2) > flyout > div > div > ul > li:nth-child(3) > ul > li > a')).click();

            return browser.driver.wait(function () {
            return browser.driver.getCurrentUrl().then(function (url) {
                return /session/.test(url); // tests that the current URL contains the word 'session'
            });
        }, 60000);
   }
};

2 个答案:

答案 0 :(得分:0)

您需要检查以下内容:

  • 您是将Jenkins作为服务器还是本地运行?
  • 如果在本地运行它是您正在运行的服务还是war文件?
  • Jenkins是否有权限将文件写入当前目录?
  • 您是否正确设置了环境变量?

您当前的问题,我认为主要是Jenkins无权在您的目录中编写文件(创建报告)。请检查一下!

答案 1 :(得分:0)

实际问题是Jenkins在后台作为服务运行。当作为服务运行时,量角器不可能打开chrome来进行测试。

量角器没有创建任何报告,因为它从未完成测试,因为它从未启动它们。当我运行批处理文件时,它没有作为服务运行,因为我的操作不是服务。