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

Проблема с ожиданиями при проверке элементов в колонке таблицы


(Alex.The.Test) #1

Добрый день друзья!

Есть такая задача:

На странице расположена таблица с некоторым количеством колонок. В шапке каждой из колонок есть список, из которого можно выбрать значение - и отфильтровать всю таблицу по данному значению. Т.е. после выбора одной опции в колонке должны присутствовать ячейки ТОЛЬКО с текстом, по которому была фильтрация.

Задача - проверить все комбинации вариантов выбора из списка.

С помощью PICT я сгенерировал 240 тестовых случаев для полного покрытия. Теперь пишу функцию для этого.

На данный момент пришел к такой логике:

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

2. Считываю из файла значения для первого случая.

3. Выбираю в нужных колонках нужные опции.

4. Жду загрузки отфильтрованных значений.

5. С помощью FindElements(By.Xpath("")); формирую коллекции для каждой и проверяемых колонок. 

6. Прохожусь .в циклах по каждой коллекции => проверяю текст элемента(ячейки)ю

7. Если текст ячейки равен тексту, по которому проходила фильтрация - тест пройден. В противном случае - фейлится.

 

При реализации/оптимизации данной функции столкнулся с 2мя проблемами:

1. Тест падает в циклах - страница изменяется после каждой итерации - соответственно ВебДрайвер "теряет" элемент. Как бороться?

2. Тест выполняется очень долго - причем значения из списка выбираются быстро, а проверка элементов в колонке - тормозит весь процесс. Где именно менять время ожидания элемента?

Интересен тот факт, что даже если после фильтрации НИ одной ячейки не вернуло - т.е. коллекция пуста - драйвер все равно ожидает - ищет элементы.

3. Подходит ли такая логика для данного теста?

 

Прошу помочь с данной ситуацией. 

 

 

 


(Alexander Petrovich) #2

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


(apetrovskiy) #3

А нельзя это сделать проще?

1. взять с драйвера код страницы

2. выцепить из кода таблицы (вот, например, таблички из моего юнит-теста):

 

<div id="tables">
  <div id="table sample 01">
  <table id="table 01">Table 01
  <tr id="tr1">
  <td id="td01">Cell 01</td>
  <td id="td02">Cell 02</td>
  <td id="td03">Cell 03</td>
  </tr>
  <tr id="tr2">
  <td id="td04">Cell 04</td>
  <td id="td05">Cell 05</td>
  <td id="td06">Cell 06</td>
  </tr>
  </table>
  </div>
   
   
  </div>

в моём примере это одна строчка кода:

 

[System.Text.RegularExpressions.Regex]::Match((Start-SeChrome | Enter-SeURL C:\Projects\PS\STUPS\TestData\controls.htm).PageSource, "(?<=([\<]table))[\s\S]*(?=([\<][\/]table[\>]))").Value;

3. а на основе вашего набора тестовых данных можно сделать - тут два варианта:

3.1 сформировать HTML код со вставленными тестовыми данными и сравнить с полученным с драйвера кодом

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

К драйверу обращение идёт один раз, вся работа (кроме получения кода с драйвера и загрузки ваших данных) проводится в памяти, довольно быстро.


(Artem) #4

Alex,  мог бы свой код скинуть, интересно посмотреть.

Спасибо.