2015-11-12 12 views
5

Ich benutze diese Eigenschaft, um die Breite und Bildschirmhöhe zu definieren:Protractor: Größe des Bildschirms

var width = 1280; 
var height = 600; 
browser.driver.manage().window().setSize(width, height); 

Bei dem Verfahren onPrepare(), aber dieser Code ist für einige Tests funktional, nicht für alle von ihnen. Warum das? Ich definiere die Bildschirmgröße in meinen Tests nicht neu.

Grüße,

Johnny

Edit: Meine Version von Knoten ist 0.10.33 mit Protactor 2.5.1.

Protractor conf:

// Fichier de configuration pour Angular 

exports.config = { 
    sauceUser: "", 
    sauceKey: "", 

    capabilities: { 
     'browserName': 'chrome', 
     'name': 'Protractor Circle CI' 
    }, 

    specs: ["src/Bg/*Bundle/Tests/Angular/*Test.js"], 
    exclude: ['src/Bg/*Bundle/Tests/Angular/*AuthTest.js', 'src/Bg/*Bundle/Tests/Angular/*RapideTest.js'], 

    baseUrl: "http://bluegrey.circle.dev:8080/app_ci.php", 

    onPrepare: function() { 
     browser.driver.get('http://bluegrey.circle.dev:8080/app_ci.php/fr_FR/login'); 

     browser.driver.findElement(by.id('username')).sendKeys('[email protected]'); 
     browser.driver.findElement(by.id('password')).sendKeys('userpass'); 
     browser.driver.findElement(by.id('_submit')).click(); 

     return browser.driver.wait(function() { 
      return browser.driver.getCurrentUrl().then(function(url) { 
       return /dashboard/.test(url); 
      }); 
     }, 600000); 

     var width = 1280; 
     var height = 600; 
     browser.driver.manage().window().setSize(width, height); 
    }, 

    jasmineNodeOpts: { 
     showColors: true, 
     defaultTimeoutInterval: 30000 
    } 
}; 

Ein Beispiel für Test, der funktioniert:

describe("Carrière > Centre d'interêt", function() { 
    describe("Tests d'ajout et de suppression d'un centre d'interêt", function() { 
     beforeEach(function() { 
      // on compte le nombre d'element 
      elements = element.all(by.css('.bloc__defaut')); 
      elements.count().then(function (nbElementP) { 
       nbElement = nbElementP; 
      }); 
     }, 60000); 

     it('GET /app_ci.php/fr_FR/dashboard/career/interest', function() { 

      browser.get('/app_ci.php/fr_FR/dashboard/career/interest'); 
     }, 60000); 

     it("Ajout du centre d'interêt", function() { 


      // On clique sur ajouter 
      element(by.css('.btn-add-js')).click(); 

      // On remplit le formulaire 
      browser.findElement(by.id('CentreInteret_intitule')).sendKeys('CentreInteret_intitule'); 
      element(by.css('.u-btn-inverse')).click(); 

      // on re-compte le nombre d'element 
      expect(elements.count()).toEqual(nbElement+1); 
     }, 60000); 

     it("Suppression d'un centre d'interêt", function() { 

      // On regarde si toutes les fenetres de suppressions sont cachés au début 
      expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy(); 

      // On clique sur supprimer 
      element(by.css('.u-btn-alert')).click(); 

      // On regarde si la fenetre de confirmation de suppression est présente 
      expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeTruthy(); 

      // On clique sur supprimer 
      element(by.css('.btn-supprimer-js')).click(); 

      // On regarde si l'element est caché 
      expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy(); 

     }, 60000); 
    }); 
}); 

Und ein Test, der fehlschlägt:

describe('Carrière > Experience Pro', function() { 
    describe("Tests d'ajout et de suppression d'une experience pro", function() { 
     beforeEach(function() { 
      // on compte le nombre d'element 
      elements = element.all(by.css('.bloc__defaut')); 
      elements.count().then(function (nbElementP) { 
       nbElement = nbElementP; 
      }); 
     }, 60000); 

     it('GET /app_ci.php/fr_FR/dashboard/career/professionalexperiences', function() { 

      browser.get('/app_ci.php/fr_FR/dashboard/career/professionalexperiences'); 
     }, 60000); 

     it('Vérification si lors du clique de la checkbox le champs date se désactive', function() { 
      // On clique sur ajouter 
      element(by.css('.btn-add-js')).click(); 

      // On regarde si par defaut les champs ne sont pas désactivés (= active) 
      expect(element(by.id('ExperiencePro_dateFin_day')).getAttribute('disabled')).toBeFalsy(); 
      expect(element(by.id('ExperiencePro_dateFin_month')).getAttribute('disabled')).toBeFalsy(); 
      expect(element(by.id('ExperiencePro_dateFin_year')).getAttribute('disabled')).toBeFalsy(); 

      // On clique 
      element(by.id('ExperiencePro_enPosteajout')).click(); 

      // On regarde si les champs sont desactivés 
      expect(element(by.id('ExperiencePro_dateFin_day')).getAttribute('disabled')).toBeTruthy(); 
      expect(element(by.id('ExperiencePro_dateFin_month')).getAttribute('disabled')).toBeTruthy(); 
      expect(element(by.id('ExperiencePro_dateFin_year')).getAttribute('disabled')).toBeTruthy(); 

      // On regarde s'ils se redésactive 
      element(by.id('ExperiencePro_enPosteajout')).click(); 
      expect(element(by.id('ExperiencePro_dateFin_day')).getAttribute('disabled')).toBeFalsy(); 
      expect(element(by.id('ExperiencePro_dateFin_month')).getAttribute('disabled')).toBeFalsy(); 
      expect(element(by.id('ExperiencePro_dateFin_year')).getAttribute('disabled')).toBeFalsy(); 
     }, 120000); 

     it("Réglage du format de date", function() { 


      // Format mois/année 
      element(by.id('reglageDate-js')).click(); 
      element(by.id('ExperiencePro_formatDate_1')).click(); 
      expect(element(by.id('ExperiencePro_dateDebut_day')).isDisplayed()).toBeFalsy(); 
      expect(element(by.id('ExperiencePro_dateDebut_month')).isDisplayed()).toBeTruthy(); 
      expect(element(by.id('ExperiencePro_dateDebut_year')).isDisplayed()).toBeTruthy(); 

      // Format année 
      element(by.id('reglageDate-js')).click(); 
      element(by.id('ExperiencePro_formatDate_2')).click(); 
      expect(element(by.id('ExperiencePro_dateDebut_day')).isDisplayed()).toBeFalsy(); 
      expect(element(by.id('ExperiencePro_dateDebut_month')).isDisplayed()).toBeFalsy(); 
      expect(element(by.id('ExperiencePro_dateDebut_year')).isDisplayed()).toBeTruthy(); 

      // Format année 
      element(by.id('reglageDate-js')).click(); 
      element(by.id('ExperiencePro_formatDate_0')).click(); 
      expect(element(by.id('ExperiencePro_dateDebut_day')).isDisplayed()).toBeTruthy(); 
      expect(element(by.id('ExperiencePro_dateDebut_month')).isDisplayed()).toBeTruthy(); 
      expect(element(by.id('ExperiencePro_dateDebut_year')).isDisplayed()).toBeTruthy(); 


     }, 60000); 

     it("Ajout de l'experience", function() { 


      // On remplit le formulaire 
      browser.findElement(protractor.By.css('#ExperiencePro_dateDebut_day option[value="1"]')).click(); 
      browser.findElement(protractor.By.css('#ExperiencePro_dateDebut_month option[value="12"]')).click(); 
      browser.findElement(protractor.By.css('#ExperiencePro_dateDebut_year option[value="2000"]')).click(); 
      element(by.id('ExperiencePro_enPosteajout')).click(); 
      element(by.id('reglageDate-js')).click(); 
      element(by.id('ExperiencePro_formatDate_0')).click(); 
      browser.findElement(by.id('ExperiencePro_poste-ajout')).sendKeys('ExperiencePro_poste'); 
      browser.findElement(by.id('ExperiencePro_entreprise')).sendKeys('ExperiencePro_entreprise'); 
      browser.findElement(by.id('ExperiencePro_ville')).sendKeys('ExperiencePro_ville'); 

      element(by.css('.u-btn-inverse')).click(); 

      // on re-compte le nombre d'element 
      expect(elements.count()).toEqual(nbElement+1); 
     }, 60000); 

     it("Suppression d'une experience", function() { 

      expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy(); 

      // On clique sur supprimer 
      element(by.css('.u-btn-alert')).click(); 

      // On regarde si la fenetre de confirmation de suppression est présente 
      expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeTruthy(); 

      // On clique sur supprimer 
      element(by.css('.btn-supprimer-js')).click(); 

      // On regarde si la fenetre affirmant la suppression est apparue 
      expect(element(by.css('.bloc__suppression')).isDisplayed()).toBeFalsy(); 

     }, 60000); 
    }); 
}); 

Edit 2: Es ist vielleicht ein Problem des Ansichtsfenster anstelle des Problems der Bildschirmgröße. Ich habe Chrome, Firefox, Safari mit SauceLabs ausprobiert und es ist das gleiche Problem.

+1

Könnten Sie ein Beispiel für ein Bestehen und Nicht spec zur Verfügung stellen? In diesen Tests muss etwas passieren, das dazu führt, dass sich die Fenstergröße ändert: \. Könnten Sie auch Ihre 1. Node Version 2. Protractor Version 3 zur Verfügung stellen?Winkelmesser Konfig? –

+0

Vielen Dank für Ihren Kommentar. Daher habe ich meinen Beitrag bearbeitet! – johnnyevolunium

Antwort

1

Können Sie versuchen, die eingestellte Größe über Chrome-Optionen zu steuern? Sie können alle anderen Deklarationen für die Set-Größe entfernen.

'browserName': 'chrome', 'chromeOptions' : { args: ['--window-size=Width,Height'] },

+0

Das gleiche Problem, aber danke, dass ich diese Option nicht kannte – johnnyevolunium

2

Sie kehren tatsächlich aus der onPrepare() Funktion bereits vor dem setSize() heißt:

onPrepare: function() { 
    browser.driver.get('http://bluegrey.circle.dev:8080/app_ci.php/fr_FR/login'); 

    browser.driver.findElement(by.id('username')).sendKeys('[email protected]'); 
    browser.driver.findElement(by.id('password')).sendKeys('userpass'); 
    browser.driver.findElement(by.id('_submit')).click(); 

    // HERE!! 
    return browser.driver.wait(function() { 
     return browser.driver.getCurrentUrl().then(function(url) { 
      return /dashboard/.test(url); 
     }); 
    }, 600000); 

    var width = 1280; 
    var height = 600; 
    browser.driver.manage().window().setSize(width, height); 
}, 

Sie sollten die „Rückkehr“ oder eingestellt, bevor es die Größe des Browserfensters entweder entfernen.

return browser.driver.manage().window().setSize(width, height); 

Sie dieses „Feature“ documented jetzt auch haben: -

Sie können auch ein Versprechen von setSize() zurück Rendite in diesem Fall protractor für das Versprechen warten würde, bevor die Ausführung der Tests gelöst werden

onPrepare kann optional ein Versprechen zurückgeben, auf das der Winkelmesser wartet, bevor die Ausführung fortgesetzt wird. Dies kann verwendet werden, wenn die Vorbereitung auf alle asynchronen Aufrufe, z. Interaktion mit dem Browser. Andernfalls kann der Winkelmesser die Reihenfolge der Ausführung nicht garantieren, und kann die Prüfungen vor Abschluss der Vorbereitung beginnen.

+0

Gut entdeckt, es ist mehr Logik, aber das gleiche Problem. Danke für das Dokument. – johnnyevolunium

0

Es ist okay, mit Mac OS X-Plattform:

capabilities: { 
    'browserName': 'chrome', 
    'platform': 'OS X 10.11', 
    'name': 'Protractor Circle CI' 
}, 

Aber es ist keine perfekte Lösung, ich warte Ihre Mitteilung

Verwandte Themen