Как проверить, что элемент не существует в Selenium 2 - PullRequest
15 голосов
/ 15 июня 2011

В Selenium 2 я хочу убедиться, что элемент на странице, загруженный драйвером, не существует. Я включил мою наивную реализацию здесь.

    WebElement deleteLink = null;
    try {
        deleteLink = driver.findElement(By.className("commentEdit"));
    } catch (NoSuchElementException e) {

    }
    assertTrue(deleteLink != null);

Есть ли более элегантный способ, который в основном подтверждает, что выброшено исключение NoSuchElementException?

Ответы [ 6 ]

31 голосов
/ 15 июня 2011

Если вы тестируете с использованием 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());
....
5 голосов
/ 03 августа 2015

Вы можете использовать это:

Boolean exist = driver.findElements(By.whatever(whatever)).size() == 0;

Если он не существует, вернет true.

2 голосов
/ 02 августа 2013

Я разделил классы страниц, поэтому мне не нужно определять элементы более одного раза.Мои тестовые классы 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");
}
1 голос
/ 04 апреля 2016

Вы можете получить список элементов, используя driver.findElements («Ваши элементы»), а затем выполнить поиск элемента. если в списке нет элемента, вы сами получили желаемое поведение:)

0 голосов
/ 19 сентября 2018

Если вы используете Javascript API, вы можете использовать WebElement.findElements(). Этот метод вернет Promise с массивом найденных элементов. Вы можете проверить длину массива, чтобы убедиться, что элементы не были найдены.

driver.findElements(By.css('.selector')).then(function(elements) {
  expect(elements.length).to.equal(0)
})

Я использую библиотеку утверждений Чай в обратном вызове Promise для ожидания определенного значения.

Ссылка: https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebElement.html

0 голосов
/ 12 июня 2014

Использовать assertFalse:)

assertFalse(isElementPresent(By.className("commentEdit")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...