gpt4 book ai didi

c# - 如何使用类属性使用扩展方法

转载 作者:行者123 更新时间:2023-11-30 23:33:00 25 4
gpt4 key购买 nike

我有一个 Selenium 类

 public class Driver
{
public IWebDriver Instance { get; set; }
public string baseURL;

public void Initialize()
{
Instance = new FirefoxDriver();
baseURL = "http://localhost:49730/";
Instance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
}

public void Wait(TimeSpan timespan)
{
Thread.Sleep((int)(timespan.TotalSeconds * 1000));
}

public void Close()
{
Instance.Close();;
}
}

我还创建了一个显式等待的扩展方法

public static class WebDriverExtensionMethods

public static class WebDriverExtensionMethods
{
public static IWebElement WaitAndFindElement(this Driver driver, By by, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(driver.Instance, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.Instance.FindElement(by);
}
}

如何使用 Driver 类属性调用方法? IE。我想调用 driver.Instance.WaitAndFindElement

最佳答案

也许你可以在 IWebDriver 上写一个扩展,而不是驱动程序:

public static class WebDriverExtensionMethods
{
public static IWebElement WaitAndFindElement(this IWebDriver driver, By by, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}

顺便说一句,这样您只能在驱动程序的实例属性上调用它。否则,除了已有的扩展之外,您还可以添加此扩展。甚至可以提取通用代码:

public static class WebDriverExtensionMethods
{
private static IWebElement WaitAndFindElementInternal(IWebDriver webDriver, By by, int timeoutInSeconds)
{
if (timeoutInSeconds > 0)
{
var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return webDriver.FindElement(by);
}

public static IWebElement WaitAndFindElement(this Driver driver, By by, int timeoutInSeconds)
{
return WaitAndFindElementInternal(driver.Instance, by, timeoutInSeconds);
}

public static IWebElement WaitAndFindElement(this IWebDriver driver, By by, int timeoutInSeconds)
{
return WaitAndFindElementInternal(driver, by, timeoutInSeconds);
}
}

这样您就可以调用 driver.Instance.WaitAndFindElement 以及 driver.WaitAndFindElement

关于c# - 如何使用类属性使用扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com