请看这个功能:
public static IWebElement WaitAndFindElement(By by, int timeoutInSeconds)
{
DefaultWait<IWebDriver> wait = new DefaultWait<IWebDriver>(driver);
wait.Timeout = TimeSpan.FromSeconds(timeoutInSeconds);
wait.PollingInterval = TimeSpan.FromMilliseconds(10000);
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
return wait.Until<IWebElement>(ExpectedConditions.ElementIsVisible(by));
}
正如您在此函数中所看到的,我正在使用ElementIsVisible
ExpectedConditions
,但我希望能够发送到此函数ExpectedConditions
,以防我需要另一个函数。
有什么建议吗?
更新
public static IWebElement find(By by, Func<ExpectedConditions, bool> condition, int timeOut)
{
WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut));
webDriverWait.IgnoreExceptionTypes(typeof(NoSuchElementException));
IWebElement elem = webDriverWait.Until<IWebElement>(ExpectedConditions.ElementIsVisible(by));
return elem;
}
所以现在它差不多完成了,我不能用ExpectedConditions.ElementIsVisible
取代condition
:
参数1:无法转换为&#39; OpenQA.Selenium.By&#39;至 &#39; OpenQA.Selenium.Support.UI.ExpectedConditions&#39;
答案 0 :(得分:1)
实际上p
oc new-app docker.io/<repo>/<app-name>
Selenium
绑定WebDriver
实现只有一些方法,而且无法将多个C#
添加到一起。
但你可以像你要求的那样创建一个自定义等待,如下所示:
ExpectedConditions
已修改: - 如果您想根据自己的选择选择不同的ExpectedConditions
,请尝试以下操作:
public static IWebElement WaitAndFindElement(By by, int timeoutInSeconds)
{
WebDriverWait webDriverWait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return webDriverWait.Until(d => d.FindElement(by).Enabled
&& d.FindElement(by).Displayed);
}
或者
ExpectedConditions
答案 1 :(得分:0)
在java中我会尝试这样的事情。不知道C#虽然
private <T> void webwait(int timeOut, int retry, ExpectedCondition<T> expCond) {
new WebDriverWait(driver, timeOut, retry).until(expCond);
}
使用它
webwait(2, 100, ExpectedConditions.visibilityOfElementLocated(
By.id("divid")));
我有一个void返回,在你的情况下你可以返回元素。然后你可以删除genric T并输入ExpectedCondition参数。