Как проверить, что элемент не существует в 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")));