транспортир и аппиум - не могут прочитать свойство undefined

Я пытаюсь провести несколько тестов на селен на устройстве Android. Все швы подключения должны работать, так как на устройстве я вижу открытие хрома, а затем изменение URL-адреса на данные;

но после изменения URL все перестает говорить

[пусковая установка] Ошибка: TypeError: не удается прочитать свойство «Q» неопределенного в module.exports (C: \ src \ angular-test \ node_modules \ wd-bridge \ lib \ wd-bridge.js: 6: 13)

Я думаю, что это связано с wdBridge, как будто я проверяю wd-bridge, js, Q выглядит так:

var Q = wd.Q;

Понятия не имею, почему это не работает.

Мой конфигурационный файл транспортира следующий:

"use strict";

exports.config = {
    specs: ['e2e/*.js'],
    framework: 'jasmine',
    capabilities: {
        'appium-version': '',
        'platformName': 'Android',
        'platformVersion': '6.0',
        'deviceName': 'Android Device',
        'autoWebView': true,
        'app': "C:/src/angular-test/platforms/android/build/outputs/apk/android-debug.apk",
        'udid': '',
        'fullReset': true,
        'browserName': 'chrome'
    },
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        print: function () {
        }
    },
    onPrepare: function () {

        var DisplayProcessor = require('../node_modules/jasmine-spec-reporter/src/display-processor');
        var SpecReporter = require('jasmine-spec-reporter');

        function TimeProcessor(options) {
        }

        function getTime() {
            var now = new Date();
            return now.getHours() + ':' +
                now.getMinutes() + ':' +
                now.getSeconds()
        }

        TimeProcessor.prototype = new DisplayProcessor();
        TimeProcessor.prototype.displaySuite = function (suite, log) {
            return getTime() + ' - ' + log;
        };
        TimeProcessor.prototype.displaySuccessfulSpec = function (spec, log) {
            return getTime() + ' - ' + log;
        };
        TimeProcessor.prototype.displayFailedSpec = function (spec, log) {
            return getTime() + ' - ' + log;
        };
        TimeProcessor.prototype.displayPendingSpec = function (spec, log) {
            return getTime() + ' - ' + log;
        };

        // add jasmine spec reporter
        var reporter = new SpecReporter({
            customProcessors: [TimeProcessor]
        });

        jasmine.getEnv().addReporter(reporter);

        var wd = require('wd'),
            wdBridge = require('wd-bridge')(wd);
        wdBridge.initFromProtractor(exports.config);

    },
    //seleniumAddress: 'http://localhost:4723/wd/hub' //For mobile devices
    seleniumAddress: 'http://localhost:4444/wd/hub' //For desktop
};

Любая помощь, как всегда, приветствуется. Спасибо


person Nick    schedule 23.01.2016    source источник


Ответы (1)


Мне самому удалось это решить. Вот что я сделал:

Как уже упоминалось, начиная с кода выше, Q не определено. Это произошло потому, что var Q = wd.Q, который можно найти внутри файла wd-bridge.js внутри папки модуля узла, находится внутри функции, которой требуются 2 параметра.

Я изменил свой файл protractor.config.js следующим образом:

"use strict";

var wd = require('wd');
var protractor = require ('protractor');
var wdBridge = require('wd-bridge')(protractor,wd);

exports.config = {
    specs: ['e2e/*.js'],
    framework: 'jasmine',
    capabilities: {
        'appium-version': '',
        'platformName': 'Android',
        'platformVersion': '6.0',
        'deviceName': 'Android Device',
        'autoWebView': true,
        'app': "C:/src/angular-test/platforms/android/build/outputs/apk/android-debug.apk",
        'udid': '',
        'fullReset': true,
        'browserName': 'chrome'
    },
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        print: function () {
        }
    },
    onPrepare: function () {

        var DisplayProcessor = require('../node_modules/jasmine-spec-reporter/src/display-processor');
        var SpecReporter = require('jasmine-spec-reporter');

        function TimeProcessor(options) {
        }

        function getTime() {
            var now = new Date();
            return now.getHours() + ':' +
                now.getMinutes() + ':' +
                now.getSeconds()
        }

        TimeProcessor.prototype = new DisplayProcessor();
        TimeProcessor.prototype.displaySuite = function (suite, log) {
            return getTime() + ' - ' + log;
        };
        TimeProcessor.prototype.displaySuccessfulSpec = function (spec, log) {
            return getTime() + ' - ' + log;
        };
        TimeProcessor.prototype.displayFailedSpec = function (spec, log) {
            return getTime() + ' - ' + log;
        };
        TimeProcessor.prototype.displayPendingSpec = function (spec, log) {
            return getTime() + ' - ' + log;
        };

        // add jasmine spec reporter
        var reporter = new SpecReporter({
            customProcessors: [TimeProcessor]
        });

        jasmine.getEnv().addReporter(reporter);

        wdBridge.initFromProtractor(exports.config);

    },
    //seleniumAddress: 'http://localhost:4723/wd/hub' //For mobile devices
    seleniumAddress: 'http://localhost:4444/wd/hub' //For desktop
};

теперь он работает отлично.

Примечание. Если у вас wd, wdBridge или protractor модули не найдены, вам необходимо установить их НЕ ГЛОБАЛЬНО (например, npm install wd вместо npm install -g wd)

Надеюсь, это поможет вам.

person Nick    schedule 23.01.2016