2016-04-14 10 views
2

Anstatt jedes Mal von schreibe ich diese WebDriverWait webDriverWait und mit until... verwenden, um es suchen Element möchte ich generische Methode schreiben wollen:Wie generische Methode zu schreiben, die auf Selen webElement warten

static IWebElement FindElement(ExpectedConditions expectedConditions, By by, int timeOut) 
{ 
    WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)); 
    IWebElement element = 
    webDriverWait.Until(ExpectedConditions.ElementExists(By.Id("foo"))); 
} 

ich dies übergeben wollen mehrere Parameter Methode:

1. ExpectedConditions. 
2. By option. 
3. time out in seconds. 

so wie Sie dies fast fertig sehen können, aber wie kann ich diese ExpectedConditions und die selector Typ in meiner Methode?

Antwort

1

würde ich eine Erweiterungsmethode verwenden:

public static IWebElement WaitElementPresent(this IWebDriver driver, By by, int timeout = 10) { 
    return new WebDriverWait(driver, TimeSpan.FromSeconds(timeout)) 
     .Until(ExpectedConditions.ElementExists(by)); 
} 

public static IWebElement WaitElementVisible(this IWebDriver driver, By by, int timeout = 10) { 
    return new WebDriverWait(driver, TimeSpan.FromSeconds(timeout)) 
     .Until(ExpectedConditions.ElementIsVisible(by)); 
} 

public static IWebElement Wait(this IWebDriver driver, Func<IWebDriver, IWebElement> condition, int timeout = 10) { 
    return new WebDriverWait(driver, TimeSpan.FromSeconds(timeout)).Until(condition); 
} 

Hier ein paar Beispiele für die Verwendung:

// wait for an element to be present and click it 
driver.Wait(ExpectedConditions.ElementExists(By.Id("..."))).Click(); 

// wait for an element to be visible and click it 
driver.Wait(ExpectedConditions.ElementIsVisible(By.Id("...")), 5).Click(); 

// wait for an element to be present and click it 
driver.WaitElementPresent(By.Id("...")).Click(); 

// wait for an element to be visible and click it 
driver.WaitElementVisible(By.Id("...")).Click(); 

Beachten Sie, dass eine Erweiterungsmethode muss in einer statischen Klasse platziert werden:

https://msdn.microsoft.com/en-gb/library/bb383977.aspx

+0

Was ist die Vorteile von Split in 2 Methoden statt einer, die erhalten der Wunsch ExpectedConditions? –

+0

Die Methode 'driver.Wait' ist flexibler im Vergleich zu den anderen, –

+0

Wie wäre es mit PoolingEvery? –

Verwandte Themen