Usando Protractor + Appium + SauceLabs

He estado tratando de intentar automatizar contra Mobile mis pruebas de transportador. He leído la mayoría de los blogs en la web, llegué a este, que es el “oficial” de Appium con Saucelabs: https://docs.saucelabs.com/tutorials/appium/#mobile-web-application Seguí las instrucciones allí, y configurado mi archivo config.js como este

 var testName = 'Testing'; //Change Project's name here in order to be identified in BrowserStack exports.config = { // The address of a running selenium server. seleniumAddress: 'http://bmsoko:[redacted]@ondemand.saucelabs.com:80/wd/hub', // Capabilities to be passed to the webdriver instance. multiCapabilities: [{ name: testName, 'appium-version': '1.4.0', 'browserName': 'Android', 'deviceName': 'Android Emulator', 'deviceOrientation': 'portrait', 'platform': 'Linux', 'version': '5.1', username: 'bmsoko', accessKey: '[redacted]' }], // Spec patterns are relative to the current working directly when // protractor is called. suites: { mobile: './././specs/mobile.js' }, // Maximum number of total browser sessions to run. Tests are queued in // sequence if number of browser sessions is limited by this parameter. // Use a number less than 1 to denote unlimited. Default is unlimited. maxSessions: 2, // protractor will save the test output in json format at this path. // The path is relative to the location of this config. resultJsonOutputFile: null, framework: 'jasmine2', // Options to be passed to Jasmine-node. jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 100000, realtimeFailure: true, showTiming: true, includeStackTrace: true, isVerbose: true, onComplete: null }, onPrepare: function () { //browser.driver.manage().window().maximize(); global.dvr = browser.driver; //variable to call selenium directly global.isAngularSite = function (flag) { browser.ignoreSynchronization = !flag; //This setup is to configure when testing non-angular pages }; browser.manage().timeouts().implicitlyWait(10000); browser.getCapabilities().then(function (cap) { browserName = cap.caps_.browserName; }); } }; 

y esto es lo que estoy tratando de hacer en mi prueba (sé que no es una muy buena prueba, solo quería probar que Appium funciona con mi aplicación angular):

 it('User should see module 1s elements on the web page', function () { browser.sleep(6000); browser.driver.findElement(by.css('.play__video')); }); 

Pero cuando ejecuto mis pruebas, sigo recibiendo este error para Android:

EDITAR : Puedo ver que la página web se está abriendo.

Pila: Error: Falló: {“mensaje”: “[$ injector: modulerr] Error al crear una instancia del módulo p debido a: \ n Error: [$ injector: nomod] El módulo ‘p’ no está disponible. O bien escribió mal el nombre del módulo o olvidó cargarlo. Si registra un módulo, asegúrese de especificar las dependencias como segundo argumento. \ nhttp: //errors.angularjs.org/1.3.14/$injector/nomod? p0 = p \ n en http: // WEBAPPLICATION.com/assets/javascripts/global.js:107:21272\n en http://WEBAPPLICATIONs.com/assets/javascripts/global.js:107:29604\n at t (http://WEBAPPLICATION.com/ asset / javascripts / global.js: 107: 29176) \ n

También he probado este escenario:

 it('User should see module 1 s video start on the web page', function () { browser.wait(EC.visibilityOf(basePage.videoButtonModule1), 10000); basePage.videoButtonModule1.click(); expect(basePage.videoContainerModule1.isDisplayed()).toBeTruthy(); }); 

pero para esto recibo el error anterior más este mensaje:

Mensaje: Error: Error al esperar que el Protractor se sincronice con la página: “[ng: test] no se encontró un inyector para el argumento del elemento para obtener la Prueba \ nhttp: //errors.angularjs.org/1.3.14/ng/test”

¿¿¿¿Qué estoy haciendo mal???? Por favor helppppp !!

EDIT 2 : compartiendo el error que estoy recibiendo con iOS

Nueva verificación del módulo de la página de aterrizaje -> El usuario debe ver el inicio del video del módulo 1 en la página web Mensaje: Falló: No se pudo encontrar el angular en la página WEBAPP.com/: angular nunca se proporcionó resumeBootstrap Pila: Error: Falló: Angular no se pudo se puede encontrar en la página WEBAPP.com/: angular nunca se proporcionó resumeBootstrap en /usr/local/lib/node_modules/protractor/node_modules/jasminewd2/index.js:102:16 en [object Object] .promise.ControlFlow.runInFrame_ (/ usr / local / lib / node_modules / protractor / node_modules / selenium-webdriver / lib / webdriver / promise.js: 1877: 20) en [object Object] .promise.Callback_.goog.defineClass.notify (/ usr / local / lib /node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:2464:25) en [object Object] .promise.Promise.notify_ (usr / local / lib / node_modules / protractor / node_modules / selenium) webdriver / lib / webdriver / promise.js: 563: 12)

Finalmente pude hacer que funcionara para mis pruebas, la única combinación que hace la magia SOLO EN SAUCELABS es

 multiCapabilities: [ { platformName: 'iOS', platformVersion: '7.1', browserName: '', app: 'safari', deviceName: 'iPhone Simulator', 'appium-version': "1.4.0", username: '', accessKey: '' } , { platformName: 'Android', platformVersion: '4.4', browserName: 'Browser', deviceName: 'Android Emulator', 'appium-version': "1.4.0", username: '', accessKey: '' } ], 

Otra combinación en lugar de estas no funcionará, al menos para mi aplicación.

He colocado un comentario sobre mi problema original para el equipo de Protractor con la esperanza de que lo contesten.

https://github.com/angular/protractor/issues/2247