Как проверить, что элемент не существует в Selenium 2
В Selenium 2 я хочу убедиться, что элемент на странице, который загрузил драйвер, не существует. Я включаю мою наивную реализацию здесь.
WebElement deleteLink = null;
try {
deleteLink = driver.findElement(By.className("commentEdit"));
} catch (NoSuchElementException e) {
}
assertTrue(deleteLink != null);
Есть ли более элегантный способ, который в основном подтверждает, что было выбрано исключение NoSuchElementException?
Ответы
Ответ 1
Если вы тестируете с помощью junit, и это единственное, что вы тестируете, вы можете сделать тест ожидающим исключения с помощью
@Test (expected=NoSuchElementException.class)
public void someTest() {
driver.findElement(By.className("commentEdit"));
}
Или вы можете использовать метод findElements
, который возвращает список элементов или пустой список, если их не найдено (не бросает NoSuchElementException
):
...
List<WebElement> deleteLinks = driver.findElements(By.className("commentEdit"));
assertTrue(deleteLinks.isEmpty());
...
или
....
assertTrue(driver.findElements(By.className("commentEdit")).isEmpty());
....
Ответ 2
Вы можете использовать это:
Boolean exist = driver.findElements(By.whatever(whatever)).size() == 0;
Если он не существует, он вернет true.
Ответ 3
Я разбил классы страниц, поэтому мне не нужно определять элементы более одного раза. Мои классы уроков nunit и mbunit называют эти классы страниц. Я еще не пробовал это, но именно так я и думал об этом, поэтому я могу использовать .exists(), как я это делал с WatiN.
Класс расширения:
public static class ExtensionMethods
{
public static IWebElement ElementById(this IWebDriver driver, string id)
{
IWebElement e = null;
try
{
e = driver.FindElement(By.Id(id));
}
catch (NoSuchElement){}
return e;
}
public static bool Exists(this IWebElement e)
{
if (e == null)
return false;
return true;
}
}
Класс страницы:
public IWebElement SaveButton { get { try { return driver.ElementById("ctl00_m_m_body_body_cp2_btnSave")); } }
Класс тестирования:
MyPageClass myPageClass = new MyPageClass(driver);
if (myPageClass.SaveButton.Exists())
{
Console.WriteLine("element doesn't exist");
}
Ответ 4
Вы можете получить список элементов, используя driver.findElements( "Ваши элементы" ), а затем выполните поиск элемента. если в списке нет элемента, у вас есть ваше желаемое поведение:)
Ответ 5
Использовать assertFalse:)
assertFalse(isElementPresent(By.className("commentEdit")));