51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1991|回复: 2
打印 上一主题 下一主题

以e2e测试工具 protractor为例,分享下page object 的使用

[复制链接]
  • TA的每日心情
    郁闷
    2017-3-1 13:43
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2017-2-8 17:44:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    Protractor 是 AngularJS 团队构建的一个端对端的测试运行工具。
    以这个工具为例。这里分享下  page object的使用,希望大家能给些意见,
    整个公司就我一个测试,黑盒测试,自动化测试,性能测试,没人交流闭门造车。在这里希望能和大家交流下。
    安装配置网上都可以找的到 这里就不多说了

    page object的使用主要是为了维护方便,个人理解 就是把 页面元素, 测试用例,逻辑给分开了写。减少页面结构修改后, 修改代码的工作
    我把用例拆成3个部分,页面元素(page),步骤(step),用例(spec),另外写了1个基类 base,里面放了一些基本的方法,一个constants文件,存放用户名,密码一类的东西。

    以登陆为例
    page 文件: 这里放页面元素
    -----------------
    'use strict';
    module.exports = {
      。。。
        nameInput: element(by.id('username')),
        passwordInput: element(by.id('password')),
        loginButton: element(by.id('login-btn01')),
        menu: element(by.id('account-menu')),
        logoutButton: element(by.id('logout')),
       。。。
    }

    ---------------------------------------------------
    step: 这里放逻辑,主要流程,一些方法
    -------------------------------------------------
    'use strict';

    const step = function () {

        const page = require('./login.page.js');
        const EC = protractor.ExpectedConditions;

        this.go = () => {
            browser.get('/');
            browser.wait(EC.visibilityOf(page.loginButton), 5000, '登陆按钮没有显示')
            .then((result) => { expect(result).toBe(true) })
        }

        this.login = () => {
            let user = constants.USERS.test;
            let page = require('./login/login.page.js');
            let stant = this;
            browser.manage().deleteAllCookies();
            browser.get('/', 5000)
            browser.wait(EC.visibilityOf(page.nameInput), 50000, '名称输入文本框没有显示');
            page.nameInput.clear().sendKeys(user.name);
            page.passwordInput.clear().sendKeys(user.word);
            browser.wait(EC.textToBePresentInElementValue(page.nameInput, user.name), 5000);
            browser.wait(EC.textToBePresentInElementValue(page.passwordInput, user.word), 5000);
            page.loginButton.click();
            browser.wait(EC.visibilityOf(page.accountname), 5000, '账号名称不可见');
            page.accountname.getText().then((text) => {
                console.log(text);
                expect(text).toMatch(user.name);
            });

        };

        this.logout = () => {
            browser.get('/');
            base.wait(self.menu, 5000);
            self.menu.click();

            browser.wait(EC.visibilityOf(page.loginButton), 5000, '登录按钮不可见').
            then((result) => { expect(result).toBe(true) })
        }  
    }
    module.exports = new step();

    ------------------------------------------------
    spec文件: 这里就是测试用例了
    -----------------------------------------------
    'use strict';

    const step = require('./login.step.js');


    describe('login page', function () {


        it('should navigate to the login page', function () {
            step.go();
        });

        it('should navigate to the main page', function () {
            step.login();
        });

        it('should return to the login page', function () {
            step.logout();
        });

        /* */
    });


    这个是启动文件,初始化的时候加载基类和constants文件
    --------------------------------------------------------
    exports.config = {
        framework: 'jasmine2',

        specs: [
            'login.spec.js'
        ],

       baseUrl: 'http://127.0.0.1:8080',
        directConnect: true,
        capabilities: {
            'browserName': 'chrome',
            },
        },

        onPrepare: function () {
            browser.ignoreSynchronization = true;
            global.__base = __dirname;
            global.constants = require(__base + '/bvt/constants.js');
            global.base = require(__base + '/bvt/base.js');
            jasmine.getEnv().addReporter(reporter);
        },
        jasmineNodeOpts: {
            defaultTimeoutInterval: 900000
        },
    }

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极分享

    查看全部评分

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 08:30 , Processed in 0.068221 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表