如何扩展IWebElement接口以添加新方法

时间:2018-11-17 12:53:41

标签: c# selenium interface extends staleelementreferenceexception

我正在尝试在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可以始终使用它?

谢谢你, 问候。

1 个答案:

答案 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

希望这会有所帮助