четверг, 10 февраля 2011 г.

Нет элемента? Давайте посмотрим

Если просто вызвать нажатие на любой контрол, а его нет, то Selenium просто вернет соответствующую ошибку как то: null com.thoughtworks.selenium.SeleniumException: ERROR: Element Control not found


Таким можно запросто обойтись, потому что более информативного сообщения придумать сложнее. Действительно элемент отсутствует. Но мне обычно хочется посмотреть почему и что там было вместо него. И надо обработать ситуацию шире

В текущем тестовом фрэймворке реализован механизм, когда почти все методы селениума перегружены или расширены и расширеные методы используются намного чаще. Я всегда обрабатываю ситуацию присутствует ли элемент на странице перед тем как сделать с ним какое-либо действие. Поэтому эта проверка была включена в реализацию функции click. Точнее clickIfPresent. Есть два варианта реализации:

1) public void clickIfPresent(String elementLocator) {
        if (super.isElementPresent(elementLocator)){
            click(elementLocator);
        }
        else
            logHtmlSource("Element " + elementLocator + " doesn't exist");
    }
2) public void clickIfPresent(String elementLocator) {
        try {
            click(elementLocator);
        }
        catch (SeleniumException e){
            logHtmlSource("Element " + elementLocator + " doesn't exist");
        }
    }

Как тест инженер я разницы не вижу, но наши Java-разработчики говорят, что второй правильнее :)