Перейти к содержимому

Фотография

QTP работа с CheckPoint и Data Table


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 ninfe@

ninfe@

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 21 июня 2011 - 07:00

Всем привет. Помогите, пожалуйста, разобраться с работой CheckPoint и Data Table
Например, есть тест на расчет в калькуляторе, данные в тест попадают из текущего для данного action Data Table.

Табличка Data Table:
Number1 Number2 Sum
1 2 3
2 2 4
1 1 2

Код:

Browser("Login").Page("Калькулятор").WebList("").Select DataTable("Number1", dtLocalSheet)
Browser("Login").Page("Калькулятор").WebList("").Select DataTable("Number2", dtLocalSheet)

Browser("Login").Page("Калькулятор").WebElement("Рассчитать").Click

Browser("Login").Page("Калькулятор").WebElement("WebTable").Check CheckPoint ("WebTable")

То есть после нажатия на кнопку рассчитать проверяется расчет. Расчет проверяется через Standard CheckPoint в свойствах которого параметр innertext получается из параметра DataTable("Sum", dtLocalSheet).

При запуске теста первый тест с первым Row1 проходит, а все последующие падают с ошибкой:
[size="2"]The smart identification mechanism was invoked.

Reason: object not found.

Original description:
micclass=WebElement
innertext=3 %
html tag=TD

Smart Identification Alternative Description: 

Base filter properties (227 objects found) 
micclass=WebElement
html tag=TD

Optional filter properties
html id=damageKoef_0 (Used, 1 matches)
class= (Ignored)
innertext=3 (Ignored)
visible=1 (Ignored)[/size]

такое ощущение проверка идет по каждой строчки таблицы. Находит первую строчку, она не соответствует и все он валится с ошибкой.
Я не понимаю, получается что в данном случае нельзя использовать CheckPoint ? А как тогда проверять расчет?
  • 0

#2 Rara

Rara

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 21 июня 2011 - 11:22

А если перед чекпоинтом сделать
MsgBox DataTable("Sum", dtLocalSheet)
то что отобразится во второй и третий раз в диалоговом окне?
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники

#3 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 21 июня 2011 - 12:35

При запуске теста первый тест с первым Row1 проходит, а все последующие падают с ошибкой:
[size="2"]The smart identification mechanism was invoked.
Reason: object not found.


Вот это самое важное
На второй итерации QTP не может найти таблицу, для которой у вас в коде стоит вызов чекпоинта.
Посмотрите, по каким свойствам он пытается ее искать, откорректируйте их так, чтобы таблица на любой итерации находилась, и будет вам счастье.
Сами чекпоинты и DataTable тут совершенно не при чем

P.S. Советую отключить Smart Identification при прогоне тестов
  • 0

#4 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 21 июня 2011 - 12:38

MsgBox DataTable("Sum", dtLocalSheet)

При отладке для вывода дебажных сообщений удобнее использовать Print
А автору топика полезнее посмотреть, что выведет строчка
Print "webTable.Exist = " & Browser("Login").Page("Калькулятор").WebElement("WebTable").Exist(0)

  • 0

#5 Rara

Rara

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 21 июня 2011 - 13:14

Спасибо за поправку, коллега :) Мне показалось, что в свойствах объекта в репозитории динамически меняется innerText на тот, который в таблице DataTable("Sum", dtLocalSheet), но почему-то туда попадают данные только из первой строчки. Перечитав сообщение понял, что данные из DataTable используются только в чекпоинте.

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

Только не таблицу не может найти, а ячейку (WebElement("WebTable")).
QTP пытается её идентифицировать по внутреннему тексту, который меняется от итерации к итерации:

innertext=3
Это мешает её распознаванию в последующих итерациях
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники

#6 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 21 июня 2011 - 13:29

такое ощущение проверка идет по каждой строчки таблицы. Находит первую строчку, она не соответствует и все он валится с ошибкой.
Я не понимаю, получается что в данном случае нельзя использовать CheckPoint ? А как тогда проверять расчет?


Прошу прощения, но я не очень понимаю, про какую таблицу идет речь. Не могли бы вы приложить скриншот со странички калькулятора?
  • 0

#7 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 21 июня 2011 - 13:34


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

Только не таблицу не может найти, а ячейку (WebElement("WebTable")).
QTP пытается её идентифицировать по внутреннему тексту, который меняется от итерации к итерации:

innertext=3
Это мешает её распознаванию в последующих итерациях

Да, точно. Пропустил про веб-элемент, потому что он называется WebTable :-). Спасибо.
Удивительно, как автору топика удалось сделать чекпоинт для ячейки таблицы
  • 0

#8 ninfe@

ninfe@

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 22 июня 2011 - 05:42

Да, точно. Пропустил про веб-элемент, потому что он называется WebTable :-). Спасибо.
Удивительно, как автору топика удалось сделать чекпоинт для ячейки таблицы



А почему нельзя делать чекпоинт для ячейки таблицы?

А если я буду идентифицировать ячейку таблицы по html id? Это поможет?
  • 0

#9 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 22 июня 2011 - 06:03

А почему нельзя делать чекпоинт для ячейки таблицы?

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

А если я буду идентифицировать ячейку таблицы по html id? Это поможет?

Если html id уникален для каждой ячейки и не изменяется при итерациях, то да.
  • 0

#10 ninfe@

ninfe@

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 22 июня 2011 - 07:39

А у меня не получается идентифицировать по свойству html id, так как при создание checkpoint предлагается на выбор только два свойства: html tag и innertext.

И я не могу понять как их можно туда добавить....
  • 0

#11 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 22 июня 2011 - 07:45

А у меня не получается идентифицировать по свойству html id, так как при создание checkpoint предлагается на выбор только два свойства: html tag и innertext.

И я не могу понять как их можно туда добавить....

В чекпоинте настраивается проверка свойств, а распознавание элемента настраивается в объектном репозитории.
Откройте объектный репозиторий, найдите там объект WebElement("WebTable") и справа укажите желаемые свойства распознавания для него.
  • 0

#12 ninfe@

ninfe@

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 22 июня 2011 - 10:23

В чекпоинте настраивается проверка свойств, а распознавание элемента настраивается в объектном репозитории.
Откройте объектный репозиторий, найдите там объект WebElement("WebTable") и справа укажите желаемые свойства распознавания для него.


Спасибо, огромное, поняла я в чем была ошибка. Все получилось.
Правда теперь почему то если в Data Table добавить дополнительную строку, тест её не видит... Выполняет 4 итерации и останавливается. Надо как то дополнительными настройками указывать сколько строк в Data Table?
  • 0

#13 ninfe@

ninfe@

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 22 июня 2011 - 10:45

Сделала дополнительную пустую строку в Global таблице и тест стразу начал проходить столько раз, сколько строк в таблице текущего экшена.

Получается что число строк Global таблицы должно соответствовать числу строк в таблице текущего экшена?
  • 0

#14 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 22 июня 2011 - 11:16

Сделала дополнительную пустую строку в Global таблице и тест стразу начал проходить столько раз, сколько строк в таблице текущего экшена.

Получается что число строк Global таблицы должно соответствовать числу строк в таблице текущего экшена?

Два раза нет.
Есть итерации теста, а есть итерации сценария.
По умолчанию тест выполняет все итерации из DataTable, а сценарий - только первую.
Максимальное количество итераций для всего теста равно числу строк, которые QTP считает заполненными*, на листе Global. Максимально возможное количество итераций для сценария равно числу строк на листе с именем сценария.
Сколько итераций теста выполнять задается в настройках File -> Settings -> Run
Сколько и каких итераций конкретного сценария выполнять указывается в настройках вызова сценария (Action Call Properties в контекстном меню, появляющемся по правой кнопке на значке сценария)

*Дело в том, что QTP трактует выделенные черным цветом строки, как заполненные, независимо от того, содержат они данные или нет. То есть, если сначала задать данных на 10 итераций, а потом из 5 последних просто удалить данные, то QTP все равно будет считать, что есть 10 итераций, просто в последних пяти все значения параметров пустые. Для того, чтобы изменить количество итераций, надо удалять сами строки, а не данные из них.
  • 0

#15 ninfe@

ninfe@

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 22 июня 2011 - 11:50

ch_ip,
Спасибо огромное! Очень большой пробел в недельном знание QTP заполнился, хоть кое что встало по полочкам :)
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных