2016-06-21 44 views
2

下面是点击一个字段中某个值进入测试的一个简单的例子:有没有办法给Protractor的控制流添加定时器事件来测量特定任务的执行时间?

it('should enter someValue into field', function() { 
    var field = $('.someField'); 

    // Insert timer start function here 
    field.click(); 
    this.switchToActiveElement().sendKeys('someValue'); 
    this.hitEnter(); 
    // Insert timer stop function here and output result! 

    assert.eventually.equal(field.getText(), 'someValue'); 
}); 

我希望做的是时间需要多久单击该字段,然后在一定的价值,然后输出不知何故这个执行时间。我原本以为我可以插入console.time()console.timeEnd()函数,但当然这不适用于量角器的控制流程,对吧?

任何与此有关的帮助将非常感激。谢谢!

+0

您可以定义自己的time_begin变量和time_end变量,并通过比较它们来衡量已用时间吗?例如。读取系统时间并将其分配给time_begin,然后再单击并读取系统时间并将其分配给time_end,从time_end中减去time_begin。 –

+0

那么,如果你使用[jasmine-spec-reporter](https://www.npmjs.com/package/jasmine-spec-reporter),它有'displayStackDuration'选项 - 但是,捕获每个“它”块的时间,而不是包含在该块下的单个操作。不知道这是你想要的。 – Gunderson

+0

@YuZhang感谢您的评论!在注释行中插入time_begin和time_end变量以测量时间的问题是量角器实际上还没有执行任何操作,因为它们是被添加到控制流队列中的promise。所以定时器会立即启动并停止,这是没有用的。 – jjelly

回答

3

所有你所要做的就是指你的变量控制流的范围内:

it('should enter someValue into field', function() { 
    var field = $('.someField'); 
    var startTime; 

    // Insert timer start function here 
    browser.controlFlow().execute(function() { 
     startTime = new Date().getTime(); 
    }); 

    field.click(); 
    this.switchToActiveElement().sendKeys('someValue'); 
    this.hitEnter(); 

    // Insert timer stop function here and output result! 
    browser.controlFlow().execute(function() { 
     var endTime = new Date().getTime(); 
     var elapsedTime = endTime - startTime; 
     console.log('elapsedTime = ' + elapsedTime + 'ms'); 
    }); 

    assert.eventually.equal(field.getText(), 'someValue'); 
}); 

您记录可能不会太精确的时间,因为量角器具有执行内置waitForAngular()前右点击,并且不会等待任何事情发生后立即敲入回车键。如果您有兴趣捕捉页面需要多长时间,您可以在记录endTime之前添加自己的browser.waitForAngular()

+1

谢谢@ martin770!这有助于我所需要的! – jjelly

相关问题