量角器实例不执行任何操作

时间:2016-12-29 09:28:14

标签: angularjs protractor

从一天到另一天,我无法与我正在测试的角度页面进行交互。

我得到的唯一结果是:

Started
A Jasmine spec timed out. Resetting the WebDriver Control Flow.
F

页面上有这个:

<html lang="sv" class="no-js" data-ng-app="app">

所以它应该有效吗? 我尝试检查iFrames并增强了allScriptTimeout:360000,但没有任何帮助。

这是我的配置:

var TIMEOUT = 360000;
var HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter');
var reporter = new HtmlScreenshotReporter({
    dest: 'report/screenshots',
    filename: 'my-report.html'
});
exports.config = {
    seleniumAddress: 'http://dmc-l01-ap08.dmc.de:4448/wd/hub',
    baseUrl: 'https://int.system.com/',

    specs: [
        './UseCases/protractorTestcaseNightly.js',
    ],

    Capabilities: [
        {
            'browserName': 'chrome',
            shardTestFiles: false,
            maxInstances: 1,
            maxSessions: -1,
            restartBrowserBetweenTests: true,
        },
    ],

    getPageTimeout: TIMEOUT,
    allScriptsTimeout: TIMEOUT,
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: TIMEOUT,
        includeStackTrace : true,
        isVerbose : true,
    },
    framework: "jasmine2",
    onPrepare: function () {
        browser.driver.manage().window().maximize();
        browser.driver.manage().deleteAllCookies();

        jasmine.getEnv().addReporter(reporter);

        var reporters = require('jasmine-reporters');
        var junitReporter = new reporters.JUnitXmlReporter({
            savePath: 'report/xml',
            consolidateAll: false,
            filePrefix: 'xmloutput'
        });
        jasmine.getEnv().addReporter(junitReporter);
    }
};

更新: 我添加了

rootElement: 'html',

到我的配置。但没有改变。在点击第一个元素之前,我还从页面截取了屏幕截图。在屏幕截图中,我可以看到我要点击的元素。

这是我的Testspec:

describe('Start testspec | ', function () {

    it('opens the start', function () {
        browser.get("/de-de/connect/").then(function () {
            console.log("1"); //works
            browser.executeScript('localStorage.clear();sessionStorage.clear();'); //works (?)
            console.log("2"); //works
            expect(element(by.xpath('//*[@class="btn-link"]'))).toBeTruthy(); //works
            console.log("3"); //works


            browser.sleep(3000);  //works
            element(by.css('.ms-linklist-typ-1 a')).click(); //DOES NOT WORK :(
            browser.sleep(3000); //works
        });
    });
});

我必须点击&#34; btn-link&#34; / css元素,因为这是cookie层,必须首先点击才能到达任何其他元素... 任何想法?

2 个答案:

答案 0 :(得分:1)

您似乎错误地使用了超时配置。 $http仅用于后端应用程序脚本不适用于整个Jasmine规范

请查看下面解释的三个超时

因此,在您的情况下,您增加ons.bootstrap() .controller('AppController', function($http) { ... }); 以增加整体规范的超时

尝试进行以下更改,看看是否可以解决问题

allScriptTimeout

此外,量角器假定您的angular-app根元素为jasmineNodeOpts.defaultTimeoutInterval。请参阅以下文档中的以下摘录。由于您的 jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 120000, includeStackTrace : true, isVerbose : true, }, 位于其他元素上,因此可能会相应更新body

  

/ ** *用于容纳角度应用程序的元素的CSS选择器 - 这个   默认为*'body',但如果ng-app在后代上则是必需的   的。 * /

ng-app

答案 1 :(得分:0)

看起来我找到了修复程序。通过更改我的安装版本,我的测试再次运行。我看起来某些版本之间存在不兼容性。它现在适用于:

Node LTS (6.10.0)
Selenium Server Standalone 3.0.1
protractor@5.1.1
npm@4.1.2