use*_*239 28 c# selenium-webdriver
在下面的代码中,我尝试等到元素可见:
var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("processing")));
Run Code Online (Sandbox Code Playgroud)
是否可以告诉驱动程序等到该元素不可见?
TDH*_*DHM 33
是的,方法可行 invisibilityOfElementLocated
wait.until(ExpectedConditions.invisibilityOfElementLocated(locator));
Run Code Online (Sandbox Code Playgroud)
Rus*_*Cam 10
以下应该等到元素不再显示,即不可见(或10秒后超时)
var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10));
wait.Until(driver => !driver.FindElement(By.Id("processing")).Displayed);
Run Code Online (Sandbox Code Playgroud)
如果找不到带有id的元素,它将抛出异常processing.
var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10));
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("processing")));
Run Code Online (Sandbox Code Playgroud)
想法是等到元素不可见.第一行设置元素必须消失的等待时间; 这是10秒钟.第二行使用selenium来检查是否满足条件"invisibilityofElementLocated".元素是通过其id在主题案例中找到的,即id="processing".如果元素在请求的时间段内没有消失,则会引发超时异常并且测试将失败.
自 2020 年起,.NET 中已弃用 ExpectedConditions。
由于某种原因,我无法使 IgnoreExceptionTypes 工作。
唯一对我有用的解决方案是 Anoop 提出的解决方案。我喜欢他的解决方案的一件事是,一旦元素变得不可见,它就会返回。
我把他的解决方案概括如下:
//returns as soon as element is not visible, or throws WebDriverTimeoutException
protected void WaitUntilElementNotVisible(By searchElementBy, int timeoutInSeconds)
{
new WebDriverWait(_driver, TimeSpan.FromSeconds(timeoutInSeconds))
.Until(drv => !IsElementVisible(searchElementBy));
}
private bool IsElementVisible(By searchElementBy)
{
try
{
return _driver.FindElement(searchElementBy).Displayed;
}
catch (NoSuchElementException)
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
WaitUntilElementNotVisible(By.Id("processing"), 10);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58513 次 |
| 最近记录: |