【问题标题】:Jenkins running Protractor tests creates no reportsJenkins 运行 Protractor 测试不会创建任何报告
【发布时间】:2016-12-18 01:52:04
【问题描述】:

我有一个 Jenkins 项目,它首先运行一个批处理文件,该文件运行一个硒服务器供 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);
   }
};

【问题讨论】:

    标签: batch-file selenium jenkins protractor


    【解决方案1】:

    您需要检查以下几点:

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

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

    【讨论】:

    • 嗯,创建这些报告的不是 Jenkins,而是 Protractor 应该创建它们。那是否仍然需要 Jenkins 具有文件写入权限?如果是这样,我需要做什么才能授予它权限?
    • 扩展其他问题:Jenkins 正在远程 Windows 从站上运行,该从站将其作为 Windows 服务运行。这个项目目前没有环境变量,但是我很难知道如何正确使用它们,例如:我可以在注入环境变量下的属性内容中设置它们,但我不知道如何使用它们构建
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多