WebDriver では、WebDriverWait は特定の条件が満たされるまでテストの実行を一時停止するように設計されています。ただし、特定のシナリオでは、ユーザーは、WebDriverWait が指定された要素の待機を無視しているように見えるという不可解な問題に遭遇します。
パズル:
ユーザーは、WebDriver に待機させようとしました。テキストを取得する前に表示される要素。ただし、ブレークポイントなしでコードを実行すると、待機がバイパスされ、例外が発生します。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); IWebElement message = wait.Until(driver => driver.FindElement(By.ClassName("block-ui-message"))); string messageText = message.Text;
解決策の洞察:
問題の核心使用されるロケーター戦略にあります。 FindElement を単独で使用するだけでは、要素の可視性を確保するには必ずしも十分とは限りません。これに対処するには、より詳細なロケーター戦略で ElementIsVisible 条件を使用することを検討してください:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
NuGet の代替:
DotNetSeleniumExtras.WaitHelpers が NuGet 経由でインストールされている場合、次のように構文を簡略化できます
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
これらの手法を利用すると、指定された要素が表示され、取得可能になるまで、WebDriver が効果的に実行を一時停止することができます。
以上がWebDriverWait が Selenium WebDriver の要素待機を無視しているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。