1

ジェネレーターを使用して、テストnode 0.11.xの作成を少し楽にしようとしています。Selenium私の問題は、それらを適切に利用する方法がわからないことです。構文の問題であるに違いないとほぼ100%確信しています。

公式selenium-webdriverモジュール (ver 2.37.0) とco(ver 2.1.0) を使用してジェネレーターを作成しています。

ジェネレーター/yield マジックを使用しない通常のテストは次のとおりです。

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

以下は、yield/generator マジックで同じ結果を得ようとする 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常にです。認めざるを得ませんが、私はジェネレーターにもプロミスにもあまり詳しくないので、非常に明白な何かを見落としている可能性があります。undefinedthen()

4

1 に答える 1

2

次の解決策を思いつきました。動作しますが、理想的ではないと思います。より良い/簡単な方法があると感じています。

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

  });

});
于 2013-11-06T17:50:30.687 に答える