如何找到量角器的元素?

时间:2015-03-19 18:58:47

标签: protractor saucelabs

似乎我使用element(by.css('#id'));量角器有时会发现它,有时却没有。取决于DOM是否已经稳定下来。我已经离开了一些:

getElementsByCss: function (cssVal) {
  // return element.all((by.css(cssVal)));
  return self.wait(function () {
    return element.all((by.css(cssVal))).then(function (els) {
      return els;
    }, function () {
      return false; // Don't fail, we want to retry
    });
  }, GET_ELEMENT_TIMEOUT, 'Elements not found by css: '  + cssVal);
},

播放重试游戏以获取某个超时时间段的元素。我们用5秒钟。这似乎在大多数情况下都有效。在本地运行时我们没有问题。

当我们在云(酱实验室)上运行时,他们的虚拟机速度非常慢。我们仍然会得到随机问题。不幸的是,这些游戏必须在任何地方播放,例如:

getText: function (el) {
  return self.wait(function () {
    return el.getText();
  }, 1000, 'Could not get element text.');
},

expectBulletin: function () {
  var el, text;
  return self.wait(function () {
      // Find the bulleting element, make sure it's visible and grab its text.
      // If any of those three fail, try all of them again.
      return self.getElementByCss('.bulletin')
        .then(function (elm) {
          el = elm;
          return self.isElementVisible(el);
        }, function () {
          return false;
        })
        .then(function () {
          return self.getText(el).then(function (text) {
            return text;
          }, function () {
            return false;
          });
        }, function () {
          return false;
        });
    }, 10000, 'Count not get bulletin text.')
    .then(function (result) {
      text = result;
      return self.executeScript('arguments[0].click();', el.getWebElement());
    })
    .then(function () {
      return self.isElementNotVisible(el);
    })
    .then(function () {
      return text;
    });
},

所有self.wait只是一个browser.driver.wait包装器......

wait: function (fn, timeout, msg) {
  return browser.driver.wait(fn, timeout, msg);
},

这感觉像是一大堆绷带,而且它一直没有工作。 expectBulletin在本地99%的时间都可以工作,但是当在慢速VM上远程运行时,它可以在大约50%的时间内工作。有时文本会返回空白,或者有关单击不可见元素或只是找不到公告元素的问题。

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

  

似乎我使用了元素(by.css('#id'));量角器有时会发现   它,有时候不会。

你知道它会返回一个承诺吗?如果你想获得一个元素的绝对值,你必须首先处理它的承诺。

在执行任何断言之前,Protractor会等待页面准备就绪。如果您的页面已准备好"但是有些数据丢失了,你的角度应用程序有问题。