【问题标题】:protractor and appium - cannot read property of undefined量角器和 appium - 无法读取未定义的属性
【发布时间】:2016-04-30 02:24:37
【问题描述】:

我正在尝试在 Android 设备上进行一些硒测试。 所有连接接缝都可以工作,因为在设备上我可以看到 chrome 打开,然后 url 更改为数据;

但在网址更改后,一切都停止了

[启动器] 错误:TypeError:无法读取 module.exports 处未定义的属性“Q”(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
};

任何帮助,一如既往,非常感谢。 谢谢

【问题讨论】:

    标签: angularjs selenium protractor appium selenium-chromedriver


    【解决方案1】:

    我自己设法解决了这个问题。 这是我所做的:

    如前所述,从上面的代码开始,Q 是未定义的。 这是因为可以在节点模块文件夹内的 wd-bridge.js 文件中找到的 var Q = wd.Q 位于需要 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
    };
    

    它现在运行良好。

    注意:如果您没有找到wdwdBridgeprotractor 模块,则需要在非全局范围内安装它们(例如,npm install wd 而不是npm install -g wd

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2020-08-17
      相关资源
      最近更新 更多