1

Selenium WebDriver を使用して、Ajax を使用して動的にロードするサイトからコンテンツを取得しています。続行する前にページが読み込まれたことを確認するために、ページの状態をチェックするカスタム Wait クラスを作成しました。FluentWait を使用して、ポーリング間隔を 2 に設定し、タイムアウトを 10 に設定しました。ただし、時間増分 0 で初めてチェックし、条件が false の場合は 2 秒間待機してから、再度チェックするなどの処理を行っていることに気付きました。

ページの読み込みには時間がかかるため最初のチェックでは常に false ですが、通常は 2 番目のチェックでは true です。初めてチェックする前に、待機を2秒間待機させる方法はありますか? つまり、必要に応じて、0、2、4、および 6 ではなく、2、4、および 6 の時点でチェックしますか?

ありがとう、BSG

編集なぜこの動作が必要なのか について言及するように求められました-結局のところ、私は意図された方法で Wait を使用しています。最初に true を返すことで得られる利点は次のとおりです。 WebDriver は、ブラウザーにコマンドを発行するたびに新しいソケットを開くようです。何らかの理由で、呼び出しの実行後にこれらのソケットが常に閉じられるとは限りません。短時間に多数の呼び出しを実行する場合 (たとえば、Wait のように状態を繰り返しチェックする場合)、仮想ソケットが不足し、ドライバーがクラッシュする可能性があります。(十分な仮想ソケットがないことは Windows 7 の既知の問題のようですが、システムを変更することはできません。)

短時間に発行するドライバーの呼び出しが少ないほど、使用可能なソケットの数をオーバーランする可能性が低くなります。最初のチェックが決してtrue を返さないことを確認しました。そのため、理由もなくソケットを開いているだけで、プログラムがクラッシュする可能性が高くなります。だからこそ待ちたい。この説明が、WebDriver で SocketExceptions を取得し続ける理由に関する情報を探している人にとって役立つことを願っています。

4

1 に答える 1

1

明白な答えはtime.sleep(2)、最初のチェックの前に (または同様のメソッド) を挿入することです。それはあなたがやろうとしていることでうまくいくでしょうか?

于 2013-07-24T18:29:27.503 に答える