2016-08-08 2 views
-1

В настоящее время я работаю над «Библиотекаю Selenium Wrapper Library», где создается набор методов для автоматизации на определенном веб-портале. Эти методы включают ведение журнала отладки и другую логику и вызывается в тестовых классах.Какое исключение бросать, когда веб-элемент находится в Selenium Automation

Я только что создал новый метод проверки наличия ячейки таблицы (имя тега 'td') внутри строки таблицы (имя тега 'tr'). Ниже создан метод:

public void checkEntryIsNotInTable(String elementTableName, By byElementTable, String checkVisibleText1) { 
    // Get All Rows from table, using tagname <tr> 
    List<WebElement> tableRows = getElements(elementTableName, byElementTable); 
    Debug.log.info("\tTotal of [" + tableRows.size() + "] Rows found in table [" + elementTableName + "]"); 
    int rowCount = 0;  
    boolean isNotFound = false; 
    FINDCELL: 
    for(WebElement row : tableRows) { 
     // Get All Cells from table, using tagname <td> 
     List<WebElement> rowCells = row.findElements(By.tagName("td")); 
     if(rowCells == null) { 
      Debug.log.error("\tNo Elements found with TagName [td] in Element [" + byElementTable + "]"); 
     } else { 
      Debug.log.info("\tRow [" + rowCount++ + "] contains [" + rowCells.size() + "] Cells"); 
     } 
     // Check Visible Text in Cell, and if found, break from for loop. 
     for(WebElement cell : rowCells) { 
      waitFor(2.0); 
      if(!cell.getText().contains(checkVisibleText1)){ 
       Debug.log.info("\t[" + checkVisibleText1 + "] not found in any Cell."); 
       isNotFound = true; 
       break FINDCELL; 
      } 
     } 
    } 
    // What kind of exception should I throw here!! 
    if(isNotFound) { 
     Debug.log.error("\t[" + checkVisibleText1 + "] found in one Cell.");  
     throw new NoSuchElementException(checkVisibleText1); 
    } 
} 

На данном этапе, когда «checkVisibleText1» найдено, мне нужно бросить новое исключение. Однако для этого метода исключение «NoSuchElementException» не отражает правильное исключение, так как элемент найден - и его не следует искать.

Какое исключение, по вашему мнению, было бы правильным отражать исключение и функциональность метода?

Большое спасибо.

PS. Не стесняйтесь предлагать улучшения коды также :)

+0

того типа ваших требования состояние, которое должно быть выброшено – Stultuske

+0

@Stultuske: я не получил вашего ответа. –

+1

Если бы архитектор, спроектировавший вашу структуру, решил, что вам нужно бросить исключение BoogaBoogaBoogaException, то это то, что оно есть. Нет никаких фиксированных «это то, что вам нужно, ничего больше» стандартного. – Stultuske

ответ

1

Вы должны проверить имеющиеся исключения и:

Если у вас есть соответствующее исключение, которое соответствует вашей ошибке затем использовать его, в противном случае создать/использовать специальное исключение или создать/использовать общее исключение с настраиваемым сообщением в зависимости от метода.

Всегда старайтесь выводить исключение с сообщением, которое будет полезно для вас.

В этом случае, если checkVisibleText1 - это текст, который вы ищете, используя NoSuchElementException с текстом, поскольку параметр не в порядке.

У вас должно быть исключение, например ElementDoesNotContainsTextException, с сообщением «\ t Element [" + elementTableName + "] не содержит текста [" + checkVisibleText1 + "]."

Попытайтесь использовать соответствующее исключение, если это возможно, или используйте общее исключение с соответствующим сообщением.

Мое мнение, что у вас слишком много шума/журналов в этом методе, слишком много журналов и слишком сложны для функциональности, которая у него есть. Методы должны иметь свои исключения, вам не нужно столько журналов.

Некоторые решения: 1. Получить текст из таблицы и проверить, если текст находится там 2. Создайте селектор на основе этого текста с помощью XPath и проверьте, что селектор 3. Проверьте текст в конкретном селектор

Создать многоразовые методы, такие как: theElementContainsText, theElementDoesNotContainsText

повторного использования как можно больше, например, для выше методы (ов), вы могли бы использовать другие методы, которые: найти элемент, получить элемент из текста

Смежные вопросы