微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – 有没有办法优化/加快数据发送到用量角器的UI?

我有类似的代码
ExamPage.prototype.enterDetailsInputData = function (modifier) {
    page.sendKeys(this.moDalexamName,'Test Exam ' + modifier);
    page.sendKeys(this.moDalexamVersionId,'Test exam version ' + modifier);
    page.sendKeys(this.moDalexamProductVersionId,'Test exam product version ' + modifier);
    page.sendKeys(this.moDalexamAudienceId,'Test exam audience ' + modifier);
    page.sendKeys(this.moDalexampublishedId,'2014-06-1' + modifier);
    page.sendKeys(this.moDalexamPriceId,'100' + modifier);
    page.sendKeys(this.moDalexamDurationId,'6' + modifier);
};

这是page.sendKeys函数.请注意,目前这还没有做任何回报承诺或任何类似的事情.如果函数编码不好,那么我欢迎评论

// page.sendkeys function
sendKeys(id: string,text: string) {
    element(by.id(id)).sendKeys(text);
}

我看着它缓慢地填满了我屏幕上的每个字段,然后重复一遍又一遍地进行了更多的测试.

有没有什么办法可以进行优化,还是等待一个领域,另一个填补,并且需要经受长时间运行的测试?

我假设sendKeys是基于承诺的.我可以例如使用AngularJS $q同时发出所有的sendKey,然后使用$q来等待他们完成?

潜在的解决方案我认为至少有一点黑客需要,无论你如何优化它 – 量角器不给你这个开箱即用.然而,这样的小帮手功能是否适合您的需要?您还需要加快文字输入与ng模型的加速?
function setNgModelToString(element,value) {
    return element.getAttribute('ng-model').then(function (ngModel) {
        element.evaluate('$eval("' + ngModel + ' = \'' + value + '\'") && $digest()');
    });
}

解决方案示例:

describe('angularjs homepage',function() {
  it('should have a title',function() {
    browser.get('http://juliemr.github.io/protractor-demo/');

    var inputString1 = '';
    var inputString2 = '';
    for (var i = 0; i < 1000; i++) {
        inputString1 += '1';
        inputString2 += '2';
    }

    /* Uncomment this to see it runs much much slower when you enter each key. */
    //element(by.model('second')).sendKeys(inputString1);   

    setNgModelToString(element(by.model('second')),inputString2);

    expect(element(by.model('second')).getAttribute('value')).toEqual(inputString2);
  });
});

为什么解决方案可行?

您需要使用$eval来包装作业,而不仅仅是赋值,因为评估不会评估副作用(一个嵌套的评估,虽然… heh).假设在角度表达式中是真实的,那么$digest()从& amp ;;这会导致摘要发生,您需要更新所有内容,因为您从摘要循环之外设置值.

关于解决方案的想法:

E2E测试背后的整个想法是使用您的应用程序“模拟”最终用户.这可能不会这样做,也可以一个一个地发送密钥,也可以复制粘贴(因为粘贴到元素中是输入输入的有效方式;因为闪存等而难以设置),见下文).

其他潜在解决方案:

>复制和粘贴:创建一个元素,输入文本,复制它,将发送Ctrl V的文本粘贴到目标元素.这可能需要做一些花哨的步法,例如使用Flash(暴露系统剪贴板是一个安全风险),并且“复制”点击一个看不见的Flash播放器.请参阅executeScript以评估目标上的功能,以便您可以访问诸如窗口之类的变量(如果需要).
>并行化你的测试.阅读官方文档here,搜索“碎片”,然后搜索“多个”.如果您主要担心整个测试集合的持续时间,而不是单独的测试,则扩展浏览器数量可能是要走的路.然而,有一个很好的机会是TDD或某些东西,因此需要每个测试运行得更快.

原文地址:https://www.jb51.cc/angularjs/142547.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐