2015-12-03 4 views
2

У меня есть селен классаКак можно использовать использовать свойство метод расширения класса

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.Instance.WaitAndFindElement

+0

Похоже, что ваш метод расширения должен быть на 'IWebDriver' - * или * вызывать его только с помощью' driver.WaitAndFindElement'. –

ответ

2

Может быть, вы можете написать расширение на IWebDriver вместо Driver:

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); 
    } 
} 

Btw, таким образом, вы могли бы назвать только его собственностью Instance водителя. В противном случае вы можете добавить это расширение в дополнение к тому, которое у вас уже есть. Может быть, даже извлекая общий код:

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.

+0

спасибо, что помогли увидеть недостаток в моих параметрах. Также спасибо за это дополнительные усилия по этим методам расширения – yuvs

+0

никаких проблем. рад помочь. – Jure

Смежные вопросы