Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Thucydides. Не проходят команды assert


(Lace) #1

Столкнулась с проблемой, когда в Thucydides не проходят команды assert

Ситуация следующая. У меня есть страница, на которой мне необходимо запомнить ряд полей для дальнешей их проверки на следующих сраницах

Данные я запоминаю в HashMap, после чего по мере надобности и задачам достаю из HashMap нужные значения и проверяю их присутсвие на других страницах.

И вот на этом этапе Thucydides постоянно выдает ошибку, при том что если запустить тот же самый тест не через Maven+Thucydides, а просто через Junit, то тест проходит без сбоев.

код следующий:

public HashMap<String, String> getData() {
        HashMap<String, String> firstAccounts = new HashMap();
        firstAccounts.put("field1", getDriver().findElement(By.xpath(локатор)).getText());
        firstAccounts.put("field2", getDriver().findElement(By.xpath(локатор)).getText());
        и так все необходимые мне в дальнешем данные

После чего я на следующей странице должна проверить, что часть полей присутсвует и данные в нихне изменились:

public void compareSavedAndShownFields(HashMap<String, String> firstAccounts) {

String pageFild1 = getDriver().findElement(By.id("id")).getText();
String pageFild2 = getDriver().findElement(By.xpath("xpath")).getText();
String field1 = firstAccounts.get("pageFild1");
String field2 = firstAccounts.get("pageFild2");
assertThat(pageFild1, containsString(field1));
assertThat(pageFild2, containsString(field2));

или же

assert(pageFild1).contains(field1);
assert(pageFild2).contains(field2);

Ни первый, не второй ассершн не проходят. причем обычно при ошибках Thucydides выдает красную надпись на шаге, что ожидался такой-то элемент или строка, а получен такой-то. Здесь же ничего. просто шаг failed и никаких обяхснений. В консоли то же самое. 

WARNING: WebDriverException thrown by findElement(By.id: paymentStatusCheckOkMessage)
org.openqa.selenium.ElementNotVisibleException: No element found for By.id: paymentStatusCheckOkMessage (a previous step has failed)
Build info: version: '2.30.0', revision: 'dc1ef9ceb805a672f56dc49198f9ffbd4ca345c7', time: '2013-02-19 09:14:38'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_11'
Driver info: driver.version: unknown

[...]

FAILURE

null
115876 [main] INFO net.thucydides.core.Thucydides -
  _____ _____ ____ _____   ____ _____  _    ____ _____

 

Такое ощущение, что Thucydides плохо работает с HashMap (он, например, выдает бешенные пояснения в отчетах на шагах, где используется HashMap), но сохранять все необходимые данные в String и потом сравнивать строки - увеличивает код раза в три, так как данных для сравнения много...


(Sergey Korol) #2

Исходя из того, что полной картины не предоставлено, предположу, что:

1) Кастомный эрор хэндлер не пустил эксепшен о том, что элемент не был найден, наружу, а просто вывел его в консоль в качестве ворнинга. По этой причине одно из значений стринга стало null. В результате assert попытался сравнить нормальную строку с null. Тут уже нужно смотреть исходники, как реализован assertThat и умеет ли он обрабатывать такую ситуацию. К тому же, containsString тоже имеет разные реализации, некоторые из них уже deprecated.

2) Самый верный способ узнать, в чем проблема - дебаг. Пройдите по шагам и посмотрите, что у вас вас мэпе, а что в финальных стрингах. Проследите за поведением драйвера - все ли элементы он нашел. Возможно, один из элементов хиден, или чем-то прикрыт, и в такой ситуации getText не выплюнул эксепшен, а лишь предупредил об этой проблеме. Попытка клика по такому элементу точно выплюнет. С getText надо пробовать, прочем, как и с ассертами.