如何扩展 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

希望对您有所帮助