Использую связку selenium + java + testng
Для "мягких" проверок реализовал (точнее будет сказать взял реализацию) TestBase (где-то на просторах интеренета, к сожалению не сохранил ссылку).
Суть в следующем: переопределяются все методы assertTrue, false и т.д.
try{ assertTrue(..., message) } catch (AssertionExcetion ae){ throw ae; //ожидаем что исключение пробросится наверх }
добавляются методы verifyTrue, false и т.д.
Мягкая проверка делается через (например для verifyTrue
try{ assertTrue(..., message); } catch (AssertionExcetion ae){ addVerificationFailure(ae); //тут просто собирается скоуп всех экшепненов в тесте и в конце теста распечатывается. }
Схема остального кода выглядит схематично так:
private void checkFieid1()throws Exception{ try{ ... commonFunc(...); ... }catch(Exception e) throw new Exception("Тестирование поля 1 не пройдено\n" + e.getMessage, e) } private void checkFieid2()throws Exception{ try{ ... commonFunc(...); ... }catch(Exception e) throw new Exception("Тестирование поля 2 не пройдено\n" + e.getMessage, e) } private void commonFunc(...)throws Exception{ try{ ... assertTrue(...,message); ... }catch(Exception e) throw new Exception("message for common func", e) } @Test public void test1() throws Exception{ try{ checkField1(); checkField2(); ... }catch(Exception e){ throw new Excetion("Test 1 failed \n" + e.getMessage,e);}
Проблема заключается в следующем, при возникновении исключения при assert (строгой проверке) выводится сообщение <expected "true", but was "false">. Данное сообщение вводит в ступор, т.к. не понятно сразу в каком месте упало, да
и стектрейс вылядит так, как будто он дальше по иерархии не пробрасывается..
Из приведенного примера, при первом взгляде на лог, абсолются не понятно в каком месте произошла ошибка, то ли в checkField1, то ли в checkField2. Писать что-то в сообщении к assert'у - тоже не вариант, по той же причине.
Нужно чтобы все выглядело так:
Test 1 failed
Тестирование поля 1 не пройдено
expected "true", but was "false"
...стектрейс...
Собственно все так и срабатывает для других исключений (не найден элемент, превышено время ожидания и т.д.), а с assert'ом не хочет...
Что необходимо сделать, чтобы он пробрасывался куда надо? Т.е. в метод из которого он был вызван (ну и далее по иерархии теста)
Таже проблема с verify,но тут при наличии решения для ассерта, придумать что делать проще :)
...надеюсь понятно описал...