E2E测试相关

测试相关配置

  • protractor.conf.js配置文件的配置

    const { SpecReporter } = require('jasmine-spec-reporter');
    /**
     * @type { import("protractor").Config }
     */
    exports.config = {
      allScriptsTimeout: 11000,
      specs: [
        './src/**/*.e2e-spec.ts'
      ],
      capabilities: {
        'browserName': 'chrome',
        'chromeOptions':  {
          'args': ['--disable-web-security', '--user-data-dir=C:/Data', '--window-size=1920,1080' ]
        }
      },
      directConnect: true,
      rootElement: 'body',
      baseUrl: 'http://localhost:4200/',
      framework: 'jasmine',
      jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        print: function() {}
      },
      onPrepare() {
        require('ts-node').register({
          project: require('path').join(__dirname, './tsconfig.json')
        });
        jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
      }
    };
    
    • 建议在配置中添加rootElement: 'body'选项,这个选项是为了让测试框架找到angular程序的宿主。
    • 配置chromeOptions选项,测试中可以禁用谷歌同源策略来避免跨域问题。

其余配置项均为默认,具体语法以及相关注意参照官网 http://www.protractortest.org/

  • 测试input事件的注意项目

    it('パスワードを入力する', () => {
          const input = element(by.css('#password-input'));
          input.sendKeys('9990102').then(() => {
            input.getAttribute('value').then(val => {
              expect(val).toEqual('9990102');
            });
          });
        });
    

    测试代码最好使用promisethen方法进行,避免不必要的异步问题,输入框的值应该使用getAttribute('value')的方式获取,直接使用getText()是无法第一时间获取到的。

  • e2e测试中不推荐使用流程控制语句

    测试中的case应该上下关联,作为流式处理,避免使用if else,否则else分支中的except将不会被执行,同时可能会扰乱case执行顺序。

    具体说明参照官网解释: https://www.protractortest.org/#/style-guide


在IE中运行E2E的注意事项

  • 新建protractor-ie.conf.js配置文件,内容与谷歌浏览器配置文件相同

    修改部分:

    capabilities: {
        browserName: 'internet explorer'
     },
    directConnect: false,  // ie需要配置成false,
    seleniumAddress: 'http://localhost:4444/wd/hub/',  // ie的服务器配置 必须项目
    
  • 测试代码书写注意事项:

    browser.waitForAngularEnabled(false);
    

    上述代码目的是为了等待Angular App的加载,默认是false,但是在IE中,仍需要显示声明。

    在第一个测试项导航到页面时需要设置browser.waitForAngularEnabled(false);

    可以消除IE中不显示画面的错误。

    在测试页面切换或者页面中有元素动态加载或者显示的测试项时,建议调用browser.waitForAngularEnabled(true);可以防止因为浏览器未能完全加载app导致的错误。

  • 在IE中运行E2E也需要配置es5配置项

    举例:

    "e2e": {
              "builder": "@angular-devkit/build-angular:protractor",
              "options": {
                "protractorConfig": "projects/mainpage/e2e/protractor.conf.js",
                "devServerTarget": "mainpage:serve"
              },
              "configurations": {
                "production": {
                  "devServerTarget": "mainpage:serve:production"
                },
                "es5": {
                  "devServerTarget": "mainpage:serve:es5"
                }
              }
            }
    

    在启动时,使用下列命令指定配置文件以及编译的目标(使用IE仍需要安装ie的驱动包和测试服务器,由于测试服务器需要java环境,所以仍需要安装openJdk)

    ng e2e mainpage --prod --configuration es5 --protractor-config ./projects/mainpage/e2e/protractor-ie.conf.js --webdriver-update false

    举例,在package.json中添加如下指令,按需执行即可

    "scripts": {
        "e2e": "ng e2e mainpage --webdriver-update false",
        "e2e:setup": "npm-run-all -s e2e:setup:*",
        "e2e:setup:std": "webdriver-manager update --standalone --versions.standalone 3.141.59",
        "e2e:setup:ie": "webdriver-manager update --ie --versions.ie 3.150.1",
        "e2e:setup:chrome": "webdriver-manager update --chrome",
        "e2e:setup:status": "webdriver-manager status",
        "e2e:ie": "npm-run-all -s e2e:ie:*",
        "e2e:ie:driver": "webdriver-manager start --ie --versions.standalone 3.141.59 --versions.ie 3.150.1 --detach",
        "e2e:ie:runner": "ng e2e mainpage --prod --configuration es5 --protractor-config ./projects/mainpage/e2e/protractor-ie.conf.js --webdriver-update false",
        "e2e:ie:shutdown": "webdriver-manager shutdown",
        ...
        ...
      }
    
  • IE浏览器需要在设置中将 secuity选项卡中四个配置(internetlocalinternet...)的保护模式勾选去除。

文档报告生成

https://www.npmjs.com/package/protractor-jasmine2-html-reporter

  • 生成报告需要使用插件(根据客户需求选用插件,下面的插件作为示例)

    • 使用npm安装插件 npm install protractor-jasmine2-html-reporter --save-dev

    • protractor.conf.js配置文件中注册插件(官网的注册方法经测试似乎并不适用,这里稍作改动)

      // 获取插件对象
      const Jasmine2HtmlReporter = require('protractor-jasmine2-html-reporter');
      ...
      exports.config = {
          ...
          ...
          
          onPrepare() {
      
          require('ts-node').register({
            project: require('path').join(__dirname, './tsconfig.json')
          });
          jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
          // 添加插件配置
          jasmine.getEnv().addReporter(Jasmine2HtmlReporter({ savePath: './test/reports/' }));
        }
      }
      
      
    • 运行e2e测试即可自动生成带有截图的报告

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容