泛型方法所以我创造了这个通用寻找元素功能:为硒FindElement功能
public static IWebElement FindElement(IWebDriver driver, Func<IWebDriver, IWebElement> expectedCondtions, int timeoutInSeconds)
{
WebDriverWait webDriverWait = CreateWebDriverWait(driver, finder,timeoutInSeconds);
webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
return webDriverWait.Until(expectedCondtions);
}
public static ReadOnlyCollection<IWebElement> FindElements(IWebDriver driver, Func<IWebDriver, ReadOnlyCollection<IWebElement>> expectedCondtions, int timeoutInSeconds)
{
WebDriverWait webDriverWait = CreateWebDriverWait(driver, finder, timeoutInSeconds);
webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
return webDriverWait.Until(expectedCondtions);
}
private static WebDriverWait CreateWebDriverWait(IWebDriver driver, IWebElement finder, int timeoutInSeconds)
{
WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
return webDriverWait;
}
用法:
IWebElement element=
WaitAndFindElement(
driver,
ExpectedConditions.ElementIsVisible(By.CssSelector("...")),
120);
现在我万特添加到找到element
也没有使用driver
的选项。 例如,而不是driver.FindElement
我想从另一个element
搜索元素:
IWebElemen element = ...
element.FindElement...
所以我想从改变我的函数签名:
IWebElement FindElement(IWebDriver driver,Func<IWebDriver, IWebElement> expectedCondtions, int timeoutInSeconds)
要:
IWebElement FindElement(IWebDriver driver, IWebElement finder, Func<IWebDriver, IWebElement> expectedCondtions, int timeoutInSeconds)
如果finder
为空我想用driver.FindElement
进行搜索。 否则:finder.FindElement
所以我的问题是如何做到这一点?
你需要驱动程序的第二个场景?听起来像是这样或那样,这是正确的吗? – Delta
为什么要为简单的Selenium函数创建一个包装?这完成了什么?无论如何,你可以在一两行中完成大部分工作。每次调用函数时,即使它使用相同的超时值,也会创建一个新的'WebDriverWait'实例。 – JeffC