当前位置: 首页 > 面试题库 >

有没有什么方法可以优化/加快使用量角器向UI的数据发送?

程峻
2023-03-14
问题内容

我有与此类似的代码:

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是基于Promise的。例如,我可以使用 AngularJS $ q 同时发布所有sendKeys,然后使用$
q等待它们完成吗?


问题答案:

潜在的解决方案 我认为,无论您如何优化,至少都需要一点骇客-
量角器不会立即为您提供这些。但是,这样的小助手功能是否适合您的需求?您还需要什么其他来加快text inputs ng-model的边?

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包装来包装赋值,而不仅仅是赋值,因为evaluate它不会评估副作用(不过是嵌套的评估,……)。假设在角度表达式中$digest()是真实的,则从中调用&&;这会导致发生摘要,由于您在摘要周期之外设置了值,因此您需要更新所有内容。

关于解决方案的想法:

E2E测试背后的整个想法是使用您的应用“模拟”最终用户。可以说这并没有做到一个接一个地发送键,或者复制并粘贴(因为粘贴到元素中是输入的有效方法;由于闪存等原因很难设置)。
, 见下文)。

其他潜在解决方案:

  • 复制和粘贴: 创建一个元素,输入文本,将其复制,然后将发送Ctrl + V的文本粘贴到目标元素。这可能需要花哨的步法,例如使用Flash(暴露系统剪贴板有安全风险),然后“复制”单击一个不可见的Flash播放器。请参见executeScript评估目标上的函数,以便您可以访问变量(如window需要)。

  • 并行测试。 在此处阅读官方文档,然后搜索“碎片”,然后搜索“多个”。如果您主要担心整个测试集合的持续时间,而不是单个测试的持续时间,那么扩展浏览器数量可能是解决之道。但是,很有可能您正在TDD或其他方面,因此需要每个测试运行得更快。



 类似资料:
  • 因此,我有一个场景,我有一个机会表,其中有客户参考和客户ID。和对ProjectManager的表有引用的Customer表。现在,我有了opportunityId,使用该id我需要获取项目经理的信息。下面是我的工作代码, 现在,我的一个问题是,这两个查询对数据库进行了两次访问,这就把我带到了问题的主要目的,如何优化它,使所有这些都能在一次访问中完成,如果你们能在这段代码中找到任何其他问题,那就太

  • 问题内容: 根据设计,每次运行新测试时,Selenium都会为您的Firefox配置文件创建一个新副本。我发现此复制时间是一个相当大的瓶颈,尤其是在运行100多个测试时。(5-15秒以重新复制配置文件)。 有谁知道有任何超越行为吗?我希望我的Selenium服务器只重用相同的firefox配置文件。我知道这违反了“干净地设置您的测试装置”的理念,但这是我愿意采取的捷径,因为我的测试不会实质性地改变

  • 问题内容: 通常,建议将RSA用于加密对称密钥,然后再将其用于加密“有效负载”。 可以使用RSA加密的数据量的实际(或理论)限制是多少(我使用的是2048位RSA密钥大小)。 特别是,我想知道使用(不同的)RSA公钥加密RSA公钥(256字节)是否安全?我在Java中使用Bouncy Castle加密库。 问题答案: 对于 n 位RSA密钥,直接加密(使用PKCS#1 “旧式”填充)适用于最大 下

  • 问题内容: 我想知道是否可以实现任何其他优化来提高Java中反射调用的速度。并不是说性能会令人望而却步,而是当我想到我正在编写的某个库中的某些代码是在某个地方的紧密循环中实现时,我会大为惊讶。 考虑一种实用方法来进行反射性调用: 基本操作是 作为性能优化,我使用目标对象的类,方法名称和签名(其代码可能需要一些改进)的哈希值来缓存该方法,但是除此之外,我还能做其他事情吗?我听说过一些有关 Invok

  • 我正在使用一个页面对象模型来实现我的自动化,我正在测试类中创建一个页面对象,如下所示。(只是一个示例代码) 但是随着我的页面数量的增加,在测试类中创建页面对象的数量也会增加。我想知道是否有任何其他优化方法来创建页面对象或任何我正在做的是好的?

  • 所以我做了这个程序,你可以给出一个圆或一条线的参数,它会通过在显示器上画一个数组来显示所述对象。 我知道我的代码可能优化得很差,但我一周前才开始编程。所以如果代码很难理解,请原谅我。 提前谢谢!