Я бы передал вызов By. * Как делегат методу click.Я не знаю фактический тип возврата вызовов By. *, Но если методы возвращают IElement
, вы можете сделать это следующим образом:
// Replace IElement by the actual return type of By.Id, By.Name, By.XPath!
public static void click(IWebDriver webDriver, Func<string, IElement> by, String elementLocator)
{
webDriver.FindElement(by(elementLocator)).Click();
}
Использование:
Commons.click(webDriver, By.Id, elementLocator);
Commons.click(webDriver, By.Name, elementLocator);
Commons.click(webDriver, By.XPath, elementLocator);
Это избавит вас от подверженных ошибкам «магических» чисел.
Альтернатива, использование методов расширения - для удовлетворения комментариев:)
// Replace IElement by the actual return type of By.Id, By.Name, By.XPath!
public static void click(this IWebDriver webDriver, Func<string, IElement> by, String elementLocator)
{
webDriver.FindElement(by(elementLocator)).Click();
}
// Convenience methods
public static void clickById(this IWebDriver webDriver, String elementLocator)
{
webDriver.click(By.Id, elementLocator);
}
public static void clickByName(this IWebDriver webDriver, String elementLocator)
{
webDriver.click(By.Name, elementLocator);
}
public static void clickByXPath(this IWebDriver webDriver, String elementLocator)
{
webDriver.click(By.XPath, elementLocator);
}