2

Mocha/Chai と一緒にWebdriverIOを使用して自分のサイトのテストを書いていますが、これを行うと:

it('select application', function(done) {
    client
        .click('.disciplinetext > table:nth-child(7) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3) > button:nth-child(1)')
        // more stuff

要素はまだ存在しません (レンダリングされませんでした)。.click()実際に要素をクリックしようとする前に、ページの読み込みが完了するのを暗黙のうちに待つべきではありませんか?

その前にこの行を平手打ちするとうまくいきます:

.waitFor('.disciplinetext > table:nth-child(7) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3) > button:nth-child(1)',1000)

しかし、 、、、またはその他のAPI コマンドwaitForの前にスローする必要はありません。何か不足していますか?.setValue().click().getText()

ページ全体が読み込まれるまで待機するコマンド、または要素にアクセスする前に暗黙的に待機する設定はありますか?

4

3 に答える 3

9

driver.manage().timeouts().implicitlyWait(ms)関数は WebdriverJS Reference API Docs に存在します。この API は、Selenium がサポートする公式の Javascript API 用であり、@sircapsalot の抜粋が由来します。ただし、Google Code を見るよりもすっきりしていて、操作も簡単です。

于 2014-03-05T18:51:32.050 に答える
2

次の方法で暗黙の待機期間を設定できます。

Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));

デフォルト設定は 0 です。これが click() が即座に起動する理由です。

明らかにこれは ac# の例ですが、翻訳できることを願っています。

これはwebdriverjsの例だと思います:

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
于 2013-09-04T17:02:29.887 に答える
1

webdriverjs には暗黙的なタイムアウトがあるようには見えません。したがって、それを変更する方法はありません。

私が考えることができる1つの解決策は、click()メソッドをこのようなものにオーバーライドすることです...(これは疑似であることに注意してください。)

click = function(what) {
  waitFor(what);
  super(what);
}

これは明示的な待機ですが、暗黙的と見なすことができます;)

編集: webdriverjsの「内部聖域」をさらに調べたところ、ここからの抜粋が見つかりました

/**
 * ...
 * @param {number} ms The amount of time to wait, in milliseconds.
 * @return {!webdriver.promise.Promise} A promise that will be resolved when the
 *     implicit wait timeout has been set.
 */
webdriver.WebDriver.Timeouts.prototype.implicitlyWait = function(ms) {
  return this.driver_.schedule(
      new webdriver.Command(webdriver.CommandName.IMPLICITLY_WAIT).
          setParameter('ms', ms < 0 ? 0 : ms),
      'WebDriver.manage().timeouts().implicitlyWait(' + ms + ')');
};

このメソッドをオーバーライドするには、JavaScript マジックを実行してみてください。

于 2013-09-04T17:26:28.577 に答える