如何扩展 IWebElement 接口以添加新方法
How to extend IWebElement interface to add a new method
我正在尝试在 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,很多元素都是动态的created/destroyed,所以给每个WebElement
加保护就成了一个巨大的问题磨难。
所以问题就变成了:我应该如何实现这个方法,以便接口 IWebElement
始终可以使用它?
谢谢,
问候。
对于遇到相同问题的任何人,以下是我解决问题的方法:
创建一个新的 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
希望对您有所帮助
我正在尝试在 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,很多元素都是动态的created/destroyed,所以给每个WebElement
加保护就成了一个巨大的问题磨难。
所以问题就变成了:我应该如何实现这个方法,以便接口 IWebElement
始终可以使用它?
谢谢, 问候。
对于遇到相同问题的任何人,以下是我解决问题的方法:
创建一个新的 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
希望对您有所帮助