遅延を持つ要素を見つけるコードがありますが、要素は既に存在しますが、クリックできず、DOMでは利用できない場合があります。これらの引数をチェックするにはコードに追加する必要があります要素を見つける関数に期待条件を追加する方法
public IWebElement FindElement(IWebDriver driver, By howBy, int timeoutInSeconds = 10)
{
TimeSpan elementTimeOut = TimeSpan.FromSeconds(20);
IWebElement elementfound = null;
try
{
WebDriverWait wait = new WebDriverWait(driver, elementTimeOut);
elementfound = wait.Until<IWebElement>(d =>
{
try
{
elementfound = driver.FindElement(howBy);
}
catch (NoSuchElementException e)
{
Debug.WriteLine("Please fail NoSuchElementException");
throw;
}
return elementfound;
});
}
catch (WebDriverTimeoutException e)
{
Debug.WriteLine("Please fail WebDriverTimeoutException");
throw;
}
return elementfound;
}
一般的なファインダでクリック可能にすることで、ドライバが既にこれらのチェックを実行しており、 'ExpectedConditions.elementToBeClickable'でカバーされていないものがいくつかあるので、それをクリックすることはできません。さらに、状態のテストは高価であり、クリックが行われたときに要素がクリック可能であるという保証はありません。推奨されるアプローチは、例外に応じて再試行するカスタムウェイターでクリックを実行することです。 –