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

Как проверить, что появилась новая запись в таблице


(Lebs) #1

есть таблица

//div[@id="app_page"]//table/tbody[2]/tr

в нее добавляется новая строка

как на выходе проверить, что строк стало на одну больше

// до добавления

int rowCount =driver.findElements(By.xpath("//div[@id=\"app_page\"]//table/tbody[2]/tr")).size();

// после добавления

int rowCount2 =driver.findElements(By.xpath("//div[@id=\"app_page\"]//table/tbody[2]/tr")).size();

//проверка

assertEquals(rowCount, rowCount2);

//ошибка

expected:<8> but was:<9>

(Максим Малунов) #2

Вопрос не понятный собственно
но может поможет
assertNotEquals ?


(vmaximv) #3

Не понятный, потому что примитивный :slight_smile:

assertEquals(rowCount+1, rowCount2);

(Lebs) #5

спасибо, работает!


(Lebs) #6

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

на странице в таблице только 20 строк, потом кнопка “В конец”.
все новые добавления в таблицу попадают на вторую страницу, соответственно написал условие, что

if (driver.findElements(By.xpath("//таблица/tr")).size() !=20) 
  {
		  driver.findElement(By.xpath("//В конец")).click();
  }

но не кликает на эту кнопку “В конец”

проверяю простой клик без условия If

 driver.findElement(By.xpath("//В конец")).click();

кликает

ошибка в условии?


(Lebs) #7

; не хватало, но в eclipse ошибок в виде подчеркиваний не было


(Александр Таранков) #8

Ты сам перечитай, что написал:

То есть у тебя кнопка “В конец” только когда в таблице > 20 строк, из которых 20 отображаются на странице. А ты проверяешь условие != 20


(Александр Таранков) #9

Где не хватает ;?


(Максим Малунов) #10

Где не хватает ;?

По ходу остался только один шанс .
Поставить ; после }


(Lebs) #11

после этой строчки

if (driver.findElements(By.xpath("//таблица/tr")).size() !=20)

не было ;

а вообще это работает так:
когда набирается 20 записей, 21 попадает на страницу 2 и появляется две кнопки “Далее” и “В конец”, потом вторая страница заполняется и так далее.

я чуть облегчил задачу и делаю сразу переход “В конец”, что позволяет мне всегда попадать на страницу где меньше 20 записей ))
а правильнее было бы “Далее” нажимать, но мне этого не сделать, к сожалению, было.


(Александр Таранков) #12

Поставив там где ты указал ; ты просто сделал строчку с if бессмысленной, а клик на кнопку безусловным. Поэтому он и работает всегда.

Зачем тебе этот if вообще, если ты всегда ищешь вновь добавленную строчку на последней странице? Тебе надо проверять наличие кнопки “В конец” и если она есть - кликать на неё. И уже там считать строчки.

Постарайся сам думать, прежде чем на форум писать. Здесь не обучают программированию.


(Lebs) #13

спасибо, видимо, без программирования webdriver не осилить мне


(Sergey Korol) #14

Без программирования, Selenium IDE - предел. Учите джаву, ибо в противном случае вы будете тратить все свое время на исправление технического брака, а не на создание тестов.


(vmaximv) #15

У вас первоначальная проблема не с программированием, а с тестированием:

  1. assertEquals(rowCount+1, rowCount2); эта проверка ровным счетом ни о чем. То, что кол-во записей в таблице увеличилось на одну единицу не говорит о том, что функционал добавления записи работает.
    2.[quote]я чуть облегчил задачу и делаю сразу переход “В конец”[/quote]
    Моделирую ситуацию, когда даже с этим переходом ваш тест будет фейлится: До добавления имеем 40 записей -> кликаем “В коней” -> попадаем на вторую страницу, на которой 20 записей -> добавляем новую запись -> в таблице появляется третья страница, а на второй кол-во записей осталось неизменным.

(Lebs) #16

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

листать при условии количества записей на странице =20 и переходить “в конец” не верно.

если на последней странице есть 20 записей, то добавленная 21 попадет уже на следующую

но проверять что кнопка “в конец” кликабельна тоже не получается, потому что она кликабельна всегда, даже если страница всего одна.

временно решение, делать клик на “в конец” после добавления новой записи, но хочется сделать грамотно, и за одно научиться как это можно сделать.

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

мои мысли. добавить запись, искать запись в таблице, если нет, то клик на “в конец” и assertTrue последнюю ячейку.

так грамотно?


(vmaximv) #17

Если в вашем гриде новая запись всегда в 100% случаях попадает в конец списка (отсутствует сортировка/поиск/фильтрация) - почему бы и нет?


(Александр Таранков) #18

Не нужно сильно мудрить, делай в автотесте так, как ты делаешь вручную. Как ты “вручную глазами” определяешь что запись добавилась?

Разбей на несколько случаев: новая запись попадает на текущую страницу, новая запись попадает на следующую страницу, на последнюю страницу и т.д.

И для каждого случая продумай алгоритм и реализуй его


(Lebs) #19

написал условие, что если есть запись на странице, проверяй последнюю строку, иначе кликай “в конец” и проверяй последнюю строку там, но клик на кнопку “в конец” почему-то совершается всегда

if (driver.findElements(By.xpath("таблица")).contains(переменная)) 
{
	assertTrue(переменная.contains(driver.findElement(By.xpath("последняя строка")).getText())); 
}
else
{
	driver.findElement(By.xpath("В конец")).click();
}
	  
assertTrue(переменная.contains(driver.findElement(By.xpath("последняя строка")).getText()));

(cactus) #20

Неправильное условие в if. Вы пытаетеь сравнить список WebElement’ов со строкой.


(Александр Таранков) #21

Если клик на кнопку совершается всегда, значит у тебя неправильное условие в if, либо условие правильное и оно всегда ложно. Что непонятно? Дебаг используй