如何使用产量(生成器)与硒网络驱动程序承诺



我正在尝试在node 0.11.x中使用生成器,以使我编写Selenium测试的生活更轻松一些。我的问题是我不知道如何正确利用它们。我几乎 100% 确定这一定是语法问题。

我正在使用官方selenium-webdriver模块(版本 2.37.0)和 co(版本 2.1.0)来创建我的生成器。

这是一个没有生成器/产量魔法的常规测试:

driver.isElementPresent(wd.By.css('.form-login')).then(function (isPresent) {
  console.log(isPresent); // true
});

以下是 2 次尝试,试图使用收益/生成器魔法获得相同的结果:

var isPresent = yield browser.isElementPresent(wd.By.css('.form-login'));
console.log(isPresent); // undefined
var isPresent = yield browser.isElementPresent(wd.By.css('.form-login')).then(function (isPresent) {
  console.log(isPresent); // true
});
console.log(isPresent); // undefined

如您所见,isPresent总是undefined的,除非在 promise 的then()回调中。我必须承认,我对生成器或承诺都不太熟悉,所以我可能会错过一些非常明显的东西。

我想出了以下解决方案。它有效,但我认为它并不理想。我有一种感觉,有一种更好/更简单的方法。

describe("The login form", function() {
  it("should have an email, password and remember me fields and a submit button", function *() {       
    var results = [];
    yield browser.isElementPresent(wd.By.css('.form-login'))
      .then(function (isPresent) {
        results.push(isPresent);
      });
    yield browser.isElementPresent(wd.By.css('.form-login input[name="email"]'))
      .then(function (isPresent) {
        results.push(isPresent);
      });
    yield browser.isElementPresent(wd.By.css('.form-login input[name="password"]'))
      .then(function (isPresent) {
        results.push(isPresent);
      });
    yield browser.isElementPresent(wd.By.css('.form-login button[type="submit"]'))
      .then(function (isPresent) {
        results.push(isPresent);
      });
    results.forEach( function (result) {
      result.must.be.true();
    });
  });
});

相关内容

  • 没有找到相关文章

最新更新