javascript - Protractor :屏幕尺寸

标签 javascript protractor

我使用这个属性来定义屏幕的宽度和高度:

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

在 onPrepare() 方法中,但此代码对某些测试有效,但对所有测试无效。这是为什么?我不会在测试中重新定义屏幕尺寸。

问候,

强尼

编辑: 我的 Node 版本是 0.10.33,带有 Protactor 2.5.1。

Protractor 的配置:

// 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('user@evolunium.fr');
        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
    }
};

一个有效的测试示例:

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);
    });
});

还有一个失败的测试:

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);
    });
});

编辑 2: 这可能是视口(viewport)的问题而不是屏幕尺寸的问题。我用 SauceLabs 在 Chrome、Firefox、Safari 上试过,它是同样的问题。

最佳答案

您实际上是在调用 setSize() 之前从 onPrepare() 函数返回:

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

    browser.driver.findElement(by.id('username')).sendKeys('user@evolunium.fr');
    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);
},

您应该删除“返回”,或者在它之前设置浏览器窗口大小。

您还可以返回由 setSize() 返回的 promise - 在这种情况下,protractor 将在执行测试之前等待解决 promise :

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

他们现在甚至拥有这个“功能”documented :

onPrepare can optionally return a promise, which Protractor will wait for before continuing execution. This can be used if the preparation involves any asynchronous calls, e.g. interacting with the browser. Otherwise Protractor cannot guarantee order of execution and may start the tests before preparation finishes.

关于javascript - Protractor :屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677458/

相关文章:

javascript - 了解 React.js 中数组子项的唯一键

javascript - NVD3怎么了?

selenium - 为 Firefox 创建一个假的网络摄像头流

javascript - Protractor :ElementArrayFinder 到通用数组

javascript - Protractor - Jasmine 。仅当存在特定元素时才执行某些操作。

javascript - AngularJS 组件和 ADAL(用于 JS 的 Active Directory Azure 库)

javascript - 在其自己的 HTML 列中插入 Google Chart 而不会溢出其他列

javascript - 计算 HH :mm using keyup in javascript or jquery 中的时间差

jasmine - Protractor 测试报告

selenium - 在 Gulp 中自动运行 webdriver 进行端到端测试