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


(Александр Таранков) #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, либо условие правильное и оно всегда ложно. Что непонятно? Дебаг используй


(Lebs) #22

@joemast много чего непонятно, поэтому прошу помощи

после добавления новой записи в таблицу, я добавил такое условие, если последняя ячейка в последней строке не равна переменной sub, то клик на кнопку В конец, в противном случает игнор условия if и выполнение AssertTrue

почему кликает в любом случае на кнопку В конец?

можно ли условие if использовать без else?

if (!driver.findElement(By.xpath("//div[@id=\"app_page\"]//table/tbody[2]/tr[last()]/td[2]")).equals(sub)) 
 {
  driver.findElement(By.xpath("//button[4]")).click();
   }

assertTrue(sub.contains(driver.findElement(By.xpath("//tbody[2]/tr[last()]/td[2]")).getText()));

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

если последняя ячейка в последней строке не равна переменной sub, то клик на кнопку В конец, в противном случает игнор условия if и выполнение AssertTrue

у ваv там сейчас если найденный Webelement не равен переменной то click /

Я так понимаю вам нужен текст в webelemente findElement(By.xpath("//div[@id=“app_page”]//table/tbody[2]/tr[last()]/td[2]")) .getText() или getAtribute

можно ли условие if использовать без else? Да у вас в коде так сделано


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

Начни с изучения Java. Хотя бы научись сам отвечать на вопрос типа [quote=“Lebs, post:22, topic:4391”]
можно ли условие if использовать без else?
[/quote]

Это уж точно не на форуме автотестирования обсуждать


(Mykhailo Poliarush) #25

@Lebs вам нужно брать книгу или какие-то курсы в руки учить программирование.
Вот недавно обсуждалась необходимая вам тема


(Lebs) #26

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

но клик идет при любом раскладе (

локатор у условии if проверял, указывает на нужную ячейку, но не обработывает почему-то, а переходит сразу к else

	  if (driver.findElements(By.xpath("//div[@class=\"table\"]//tr[last()]/td[2]")).contains(field)) 
  {
  	assertTrue(field.contains(driver.findElement(By.xpath("//div[@class=\"table\"]//tr[last()]/td[2]")).getText())); 
  }
 
  else
  {
  	driver.findElement(By.xpath("//button[4]")).click();
  	assertTrue(field.contains(driver.findElement(By.xpath("//div[@class=\"table\"]//tr[last()]/td[2]")).getText()));
  }

(vmaximv) #27

Потому что у вас не корректное условие, так как нету полного понимания как работает contains и findElement[s].


(Lebs) #28

спасибо, убрал s в findElements и добавил .getText().contains(field))

работает