ivanov660 / TestingTool-3

Инструмент автоматизации тестирования ПО
Apache License 2.0
104 stars 24 forks source link

Как проверить, что список на форме пустой? #49

Closed uramalyutin closed 5 years ago

uramalyutin commented 5 years ago

Добрый день. Подскажите, пожалуйста, решение или хотя бы в какую сторону копать. Столкнулся с проблемой, сам решение не придумал. Казалось, что где-то уже видел решение, но не нашел (может все-таки просто показалось, что видел). Собственно вопрос: как проверить, что в списке на форме нет ни одной строчки? Понимаю, что нужно использовать "Условие", но как заполнить параметр, который нужно проверять в условии я не придумал.

ivanov660 commented 5 years ago

Сходу могу предложить такой вариант:

Режим исключения (так иногда делает 1С) через выполнить произвольный код Что-то вроде...

СтрокаПустая = Истина; Попытка СтрокаПустая = ТекущаяПеременная.ПерейтиКСтроке(); // к любой строке Истина если ок, ложь если нет // Или мПараметрыКлиент["ИмяПеременной"]..ПерейтиКСтроке(); Исключение // в старых версиях вызывало исключение, если не могла перейти КонецПопытки; мСцен_УстановитьЗначениеПараметра("СтрокаПустая",СтрокаПустая);

ivanov660 commented 5 years ago

@uramalyutin удалось проверить?

uramalyutin commented 5 years ago

Прошу прощения за молчание, некоторое время не было доступа к компьютеру. Прошу не закрывать запрос, завтра (из офиса) выложу код, который у нас работает.

uramalyutin commented 5 years ago

Собственно код такой же, что и приведенный выше:

// СписокПустой - Булево // Истина - список пустой (значение по умолчанию) // Ложь - список не пустой СписокПустой = Истина; Попытка // Вызываться этот код будет после того, как по ходу выполнения сценария найдена таблица на форме, в которой требуется проверять наличие строк // Сначала получаем активное окно в тестируемом клиенте, // затем получаем активную форму, // затем получаем текущий элемент на форме (в нашем случае это будет Список) // и пробуем перейти к любой строке списка (Истина - удалось перейти (как минимум одна строка в списке есть), Ложь - в списке нет ни одной строки), // получаем числовое представление полученного результата, СписокПустой = Не ТестовоеПриложение.ПолучитьАктивноеОкно().ПолучитьОбъект().ПолучитьТекущийЭлемент().ПерейтиКСтроке(); Исключение // Если невозможно перейти к строке, считаем, что список пустой КонецПопытки; мСцен_УстановитьЗначениеПараметра("СписокПустой",СписокПустой);

Этот код оформлен как отдельный библиотечный сценарий и вызывается как готовый блок шагов. Поскольку код выполняется только после того, как была успешно найдена таблица на форме, то нет необходимости в коде проверять наличие этой таблицы, поэтому можно сразу попытаться перейти к строке в таблице. В нашем случае (платформа 8.3.12.1595 и ЗУП КОРП 3.1.8.246) если список пустой, то попытка перехода к строке вызывает исключение. В результате выполнения кода возвращаемое значение сохраняется в параметре, которое потом анализируется в условии. image

Спасибо за помощь! Запрос можно закрывать.

uramalyutin commented 5 years ago

Форматирование кода не сохраняется, прикладываю картинкой (легче читается). image

ivanov660 commented 5 years ago

@uramalyutin Для код клиент не обязательно делать обвязку из процедур "подключить тестируемое приложение" или отключить, если предполагается вызов этого кода внутри подключения. Т.е. в этом случае лучше уберите эти лишнюю обвязку из файла библиотеки.

uramalyutin commented 5 years ago

@ivanov660, прокомментируйте, пожалуйста. Обвязка "Подключить/отключить тестируемое приложение" делалась для проверки работы этого кода и осталась на случай проверки возможных изменений этого кода в дальнейшем. Вообще я не заметил, чтобы наличие этой обвязки оказывало влияние на выполнение сценария и у меня сложилось ощущение, что если тестируемый клиент уже был подключен ранее, то эти команды просто игнорируются. Во всяком случае у меня еще пока проблем не возникало из-за наличия этой обвязки, может быть еще все впереди =)

ivanov660 commented 5 years ago

@uramalyutin

  1. Проблем быть не должно (если вы не используете какие-либо настройки в параметрах подключения).
  2. Да, если тестируемый клиент был подключен ранее с такими же настройками (у вас скорее всго их нет в обоих случаях), то алгоритм фактически игнорирует этот шаг. Если же вы - укажите в свойствах этого шага другое клиентское соединение, то он будет пытаться переключиться на него, но по завершении не вернется к прежнему.

Я изложил мысль в рамках присутствия лишних шагов в вашем случае (которые ничего не делают полезного и не несут никакой смысловой нагрузки). Т.е. что-то вроде "мусора" в скрипте, обычно мы чистим такое. Маленький скрипт-ревью с моей стороны) Но это ваше решение и оно остается за вами.

uramalyutin commented 5 years ago

@ivanov660, спасибо за подробное описание. Да, вы правы, в обоих случая настройки подключения не были заданы. Получается, что обвязка "Подключить/отключить тестируемое приложение" в данном случае даже вредна и нужно ее убрать, т.к, исходя из вашего описания, она вызовет проблемы, если этот код будет вызываться из сценария, в котором подключение к клиенту тестирования осуществляется не с пустыми настройками подключения. Спасибо за ревью)