如何在量角器中添加新的元素函数

时间:2015-04-21 07:21:29

标签: javascript selenium automated-tests protractor

我们正在使用量角器/硒来驱动测试 - 我真的想要替换某些功能 - 比如sendkeys和click以便我可以a)记录控制台发生的事情,但b)使它们更可靠(我们是发现点击只是随机失败10%的时间,所以想把它放在重试循环中)

是否有一个明显的原型躺在某处,或者其他一些我可以添加功能的对象?我特别想要替换现有的函数,但也希望添加其他帮助程序,并将它们称为

element(By.Css("blah")).someHelper()

更清洁
someHelper(element( By.Css("blah"))

1 个答案:

答案 0 :(得分:0)

你根本不改变量角器,你在量角器周围写一个包装器并在你的测试中使用它。

例如,只要我们想要点击某个元素,我们就不会使用.click()函数,我们甚至不会查找该元素。我们使用包装器并调用clickElement。

resolveSelector: function (selector) {
  var el;
  if (typeof selector === 'string') {
    el = self.getElement(selector);
  } else {
    el = selector;
  }
  return el;
},

getElement: function (selector) {
  verbose('getElement: ' + selector);
  return element(by.css(selector));
},

waitForElement: function (selector) {
  verbose('waitForElement: ' + selector);
  var el = self.resolveSelector(selector);
  return self.wait(function () {
    return self.executeScript(function (el) {
      return el ? $(el).is(':visible') : false;
    }, el.getWebElement()).then(function (val) {
      return val;
    });
  }, 15000, 'Element is not visible. (' + selector + ')');
},

waitForElementClickable: function (selector) {
  verbose('waitForElementClickable: ' + selector);
  var el = self.resolveSelector(selector);
  var condition = function () {
    return self.waitForElement(el).then(function () {
      return self.isElementEnabled(el);
    });
  };
  return self.wait(condition, 15000, 'Element not clickable. (' + selector + ')');
},

clickElement: function (selector) {
  verbose('clickElement: ' + selector);
  var el = self.resolveSelector(selector);
  return self.waitForElementClickable(el).then(function () {
    return el.click();
  });
},

你可以看到我们的clickElement函数做了一些工作,如果config选项设置为true,verbose是一个只调用console.log的函数。

如果您希望测试可靠,并且能够调整内容,那么您将不得不编写驱动程序并使用它而不是直接在测试中使用量角器。当用于运行测试的selenium云服务时尤其如此。

因此,在我们的测试中,我们会调用driver.clickElement('#someID');driver.clickElement('.someClass');

我们的司机很大但随着时间的推移它已经增长。