所以我創造了2個通用功能FindElement
和FindElements
:硒尋找元素
public class Find
{
public static IWebElement Element(IWebDriver driver, Func<IWebDriver, IWebElement> expectedCondtions,
By locator, IWebElement finder = null, int timeOutInSeconds = 120)
{
WebDriverWait webDriverWait = CreateWebDriverWait(driver, timeOutInSeconds);
webDriverWait.Until(expectedCondtions);
if (finder != null)
return finder.FindElement(locator);
return driver.FindElement(locator);
}
public static ReadOnlyCollection<IWebElement> Elements(IWebDriver driver, Func<IWebDriver, ReadOnlyCollection<IWebElement>> expectedCondtions,
By locator, IWebElement finder = null, int timeOutInSeconds = 120)
{
WebDriverWait webDriverWait = CreateWebDriverWait(driver, timeOutInSeconds);
webDriverWait.Until(expectedCondtions);
if (finder == null)
return driver.FindElements(locator);
return finder.FindElements(locator);
}
private static WebDriverWait CreateWebDriverWait(IWebDriver driver, int timeOutInSeconds)
{
WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeOutInSeconds));
webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
return webDriverWait;
}
}
用法:
IWebElement element =
Find.Element(
driver,
ExpectedConditions.ElementIsVisible(By.CssSelector("bla bla")),
By.CssSelector("bla bla"));
正如你看到的我是把我的locator
兩次,我function
所以我的問題是有一種方法可以只發送一次?
這是非常全面的解釋,非常感謝。 – user979033