首页 > 解决方案 > 量角器测试未完成,似乎循环直到茉莉超时错误命中

问题描述

无法进行最基本的量角器测试,我感到很愚蠢。给定量角器 5.4.1 我有一个 spec.js

describe('my example tests', () => {
  const EC = protractor.ExpectedConditions;
    it('tests google', async () => {
      await browser.waitForAngularEnabled(false);
      await browser.get("https://google.com");
      await browser.wait(EC.visibilityOf($('input')));
      await element(by.css("input")).click();});});

和一个conf

exports.config = {

  directConnect: true,
  specs: ['tests/**/*.js'],
  capabilities: {
    browserName: 'chrome',
  },

  SELENIUM_PROMISE_MANAGER: false,

  jasmineNodeOpts: {
    defaultTimeoutInterval: 40000
  }
};

运行时protractor conf.js浏览器打开,转到页面,然后在 40s 茉莉花超时命中之前什么都没有发生。我得到的是每秒约 25 个警告,
W/element - more than one element found for locator By(css selector, input) - the first result will be used
就好像某个命令在无限循环中运行,直到我得到一个错误Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.,它并没有告诉我太多并且很难用谷歌搜索。

有没有人遇到过这个问题?

标签: protractor

解决方案


在 Google 页面上,定位器 $('input') 匹配许多元素,这就是您收到警告的原因。用了第一个,可惜第一个被隐藏了。所以await browser.wait(EC.visibilityOf($('input')));失败了,这给出了超时错误。使用定位器来定位页面上唯一且未隐藏的输入元素,就像element(by.name('q'))应该更好地工作一样。

我喜欢Hetzner 云量角器测试助手,它提供像 waitToBeDisplayed 这样的包装器,如果我没记错的话,它的错误报告不太通用(我已经有一段时间没有使用它了)。


推荐阅读