ホームページ >バックエンド開発 >PHPチュートリアル >暗黙的で明示的な待機を使用して、セレンPHPの同期を処理する方法は?
暗黙的で明示的な待機を使用してセレンPHPの同期を処理する方法はありますか?
同期は、Selenium PHPテストで重要です。 同期を処理しないと、またはNoSuchElementException
エラーが発生します。 Selenium PHPには、暗黙的および明示的な待機の2つの主要なアプローチを提供します。StaleElementReferenceException
暗黙的な待機:これらの待機は、WebDriverに、指定された間隔で(通常は数秒で)DOM(ドキュメントオブジェクトモデル)に一定の時間ポーリングするように指示してから、を投げる前に一定の時間(通常は数秒)に指示します。 タイムアウト期間内に要素が利用可能になった場合、スクリプトは進行します。そうでない場合、例外がスローされます。 あなたはNoSuchElementException
を使用して暗黙の待機を設定します。 これにより、テスト中のすべての$driver->manage()->timeouts()->implicitlyWait($seconds);
すべての要素に対してグローバルな待機が設定されます。 彼らは、タイムアウトと条件を議論として必要とするクラスを利用します。指定された条件が満たされるか、タイムアウトの有効期限が切れるまで、はDOMを投票します。一般的な条件には、
、およびが含まれます。 明示的な待機を使用する例は次のとおりです。 WebDriverWait
WebDriverWait
このコードは、ID「MyElement」がページに最大10秒間存在する要素を待機します。 その時間内に要素が見つからない場合、aexpectedConditions::presenceOfElementLocated()
がスローされます。 明示的な待機は、精度の暗黙的な待機と不必要な遅延を回避するよりも好まれます。 expectedConditions::elementToBeClickable()
すべてexpectedConditions::textToBePresentInElement()
要素検索。 それらは、すべての
<code class="php">use Facebook\WebDriver\WebDriverWait; use Facebook\WebDriver\Exception\TimeoutException; use Facebook\WebDriver\ExpectedConditions; try { $wait = new WebDriverWait($driver, 10); // Wait for up to 10 seconds $element = $wait->until(ExpectedConditions::presenceOfElementLocated(WebDriverBy::id('myElement'))); // Interact with the element } catch (TimeoutException $e) { // Handle the timeout exception echo "Element not found within the timeout period: " . $e->getMessage(); }</code>クラスとさまざまな
を使用して待機基準を定義します。TimeoutException
最も効果的な戦略は、暗黙的な待機と明示的な待機の両方を組み合わせています:
ExpectedConditions
WebDriverWait
、try-catch
、TimeoutException
、NoSuchElementException
:WebDriverはまだロードされていないため、要素を見つけることができません。 暗黙的な待機と明示的な待機の両方が、要素が表示される時間を提供することにより、これに対処できます。明示的な待機は、特定の要素をターゲットにするため、より効果的です。StaleElementReferenceException
:要素はDOMから削除されています(たとえば、ページの更新またはAJAXの更新により)。 要素が再び表示されるのを待つことでpresenceOfElementLocated()
のような条件で明示的な待機が役立ちます。ExpectedConditions::elementToBeClickable()
要素を完全にロードまたはクリック可能にする前に、要素をクリックまたは相互作用すると、予期しない動作につながる可能性があります。 ここでは、以上が暗黙的で明示的な待機を使用して、セレンPHPの同期を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。