Ребята, помогите.
Нужно дождаться исчезновения элемента.
Знаю на Java есть для этого метод - invisibilityOfElementLocated.
Есть ли что нибудь подобное на c#? И как по красивому решить эту задачу?
как вариант:
если элемент пропадает не сразу, а с задержкой -
опционально - чекать окончание Ajax’а
каждый N сек искать элемент и если WebElement.Displayed то он еще присуствует, как только он не Displayed => пропал.
Да, элемент пропадает не сразу.
В общем не знаю насколько это красиво, но вот, мб кому пригодится.
try
{
while (Driver.FindElementById("element").Displayed)
{
if (tm >= 10)
{
Assert.Fail("Error step 3");
break;
}
else
{
Thread.Sleep(1000);
tm++;
}
}
}
catch (NoSuchElementException)
{
}
Не красиво. Посмотрите как это реализовано в “коробочных” кондишенах и по аналогии напишите свои:
/// <summary>
/// An expectation for checking that an element is either invisible or not
/// present on the DOM.
/// </summary>
/// <param name="locator">The locator used to find the element.</param>
/// <returns><see langword="true"/> when the element is invisible or not present; otherwise, <see langword="false"/>.</returns>
public static Func<IWebDriver, bool> InvisibilityOfElementLocated(By locator)
{
return (driver) =>
{
try
{
return !driver.FindElement(locator).Displayed;
}
catch (NoSuchElementException e)
{
// Returns true because the element is not present in DOM. The
// try block checks if the element is present but is invisible.
return true;
}
catch (StaleElementReferenceException e)
{
// Returns true because stale element reference implies that element
// is no longer visible.
return true;
}
};
}
Порт “коробочного” кондишена с Java в C#
Так как я в Java заметил достаточно большое количество таких методов, то портировал их для своего проекта.
Блин, сам не додумался в реализацию InvisibilityOfElementLocated на java заглянуть)))
Видимо заработался)
всем спасибо!
Самое красивое решение этой задачи предлагает Selenide.
Буквально одна строчка:
$("#mydiv").should(disappear);
Все это прекрастно, но вопрос был о C#, а Selenide, на сколько я знаю, Java.
Так же был указан метод ExpectedConditions и тот же Selenide cкорей всего так же использует этот метод, а как вы реализуете в своем коде это уже дело каждого, у некоторых могут быть хелперы аналогичные указанному вами коду.