我正在尝试在C#中扩展接口IWebElement
,以添加新的方法来防范StaleElementReferenceException
。
我要添加的方法是一个简单的retryingClick
,在放弃之前,该方法将尝试单击WebElement最多三次:
public static void retryingClick(this IWebElement element)
{
int attempts = 0;
while (attempts <= 2)
{
try
{
element.Click();
}
catch (StaleElementReferenceException)
{
attempts++;
}
}
}
添加该方法的原因是,我们的网页大量使用了jQuery,并且大量创建/销毁了许多元素,因此为每个WebElement添加保护成为一项巨大的考验。
问题就变成了:我应该如何实现此方法,以便接口IWebElement可以始终使用它?
谢谢你, 问候。
答案 0 :(得分:0)
对于到达的人有相同的问题,以下是我的解决方法:
创建新的static class
ExtensionMethods:
public static class ExtensionMethods
{
public static bool RetryingClick(this IWebElement element)
{
Stopwatch crono = Stopwatch.StartNew();
while (crono.Elapsed < TimeSpan.FromSeconds(60))
{
try
{
element.Click();
return true;
}
catch (ElementNotVisibleException)
{
Logger.LogMessage("El elemento no es visible. Reintentando...");
}
catch (StaleElementReferenceException)
{
Logger.LogMessage("El elemento ha desaparecido del DOM. Finalizando ejecución");
}
Thread.Sleep(250);
}
throw new WebDriverTimeoutException("El elemento no ha sido clicado en el tiempo límite. Finalizando ejecución");
}
}
对于方法RetryingClick
作为IWebElement类型的方法而言,应该足够了
如有疑问,请检查Microsoft C# Programing guide for Extension Methods
希望这会有所帮助