selenium - 有没有办法在Protractor的控制流中添加定时器事件来测量特定任务的执行时间?

标签 selenium webdriver protractor webdriverjs

下面是一个简单的测试示例,单击字段以输入某个值:

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() 函数,但当然这不适用于 Protractor 的控制流,对吗?

任何有关此问题的帮助将不胜感激。谢谢!

最佳答案

您所要做的就是在控制流的上下文中引用变量:

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');
});

您记录的时间可能不太精确,因为 Protractor 在执行单击之前有一个内置的 waitForAngular(),并且在按下 Enter 键后不会等待任何事情发生。如果您有兴趣捕获页面稳定所需的时间,您可以在记录 endTime 之前添加自己的 browser.waitForAngular()

关于selenium - 有没有办法在Protractor的控制流中添加定时器事件来测量特定任务的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955782/

相关文章:

python - 无法捕获异常

java - 如何循环浏览 webdriver 中的条形图元素?

nunit - 将外部数据源与 NUnit 的 TestCaseAttribute 一起使用

java - 为什么 java webdriver 中的 getWindowHandles() 返回 Set<> 而不是 ArrayList<>?

javascript - 如何从命令行覆盖 protractor.conf.js 值?

angularjs - 无法检查元素是否被禁用

java - 如何通过 Selenium-Java 连接到 putty 来执行命令集并验证 putty 窗口中的输出

python - 选择选项值不起作用

selenium - 在 Linux 上使用 Protractor 运行 selenium-chromedriver

javascript - 使用 Protractor 测试 AngularJS 应用程序时如何处理预期文本中的 '