Как его остановить?!
#1
Отправлено 08 апреля 2012 - 16:09
#2
Отправлено 08 апреля 2012 - 17:47
#3
Отправлено 08 апреля 2012 - 18:03
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#4
Отправлено 09 апреля 2012 - 04:37
Дмитрий
#5
Отправлено 09 апреля 2012 - 06:00
Вот отправляю два скриншота из которых суть проблемы понятна.Вот бы посмотреть на этот файлик. А ещё лучше на весь проект.
Прикрепленные файлы
#6
Отправлено 09 апреля 2012 - 06:06
Нет, из выполняемого на текущий момент скрипта обращений к данному файлу нет никаких. Более того, все началось с файла (который затем был удален), который был создан уже после того как были написаны существующие скрипты, и предназначался для их последующей модернизации с целью использования часто повторяющихся объектов непосредственно из этого файла (скрипта).Возможно обращение к файлу находится в каком-то обработчике события (например, OnStartTest)?
#7
Отправлено 09 апреля 2012 - 06:49
#8
Отправлено 09 апреля 2012 - 06:49
Т.е. пример кода VBS:
unit1
Call log.Message("Я не размещен в теле функции")
unit2
function a
....
end function
function b
...
end function
При запуске функций а или b, сначала выполнится сообщение в лог unit1, т.к. содержимое unit1 лежит вне каких-либо функций, на самом верхнем уровне, если можно так сказать. Не помню обязательно ли, чтобы юниты "видели" друг друга. В общем, для решения этой проблемы, надо то выражение в unit1 запинхуть в функцию/процедуру.
Сообщение отредактировал Rebz: 09 апреля 2012 - 06:53
#9
Отправлено 09 апреля 2012 - 06:57
answer = 42; function Test() { Log.Message(answer); // 42 }Ошибки в логе из-за того, что не все из объявленных объектов существуют в приложении на момент запуска теста.
Возможные варианты решения проблемы:
* Использовать Name Mapping (ака репозитарий объектов - судя по всему, вы пытаетесь его переизобрести :))
* Хранить имена объектов как строки, и в нужный момент конвертировать их в объекты eval'ом. Так вы избежите ошибок "The object doesn't exist" в начале теста:
// Файл с переменными strMainWindow = "Sys.Process(\"GWTalk\").WinFormsObject(\"Main\")"; // Файл теста function Test() { ... MainWindow = eval(strMainWindow); // Конвертируем строку с именем объекта в сам объект MainWindow.Activate(); }
#10
Отправлено 09 апреля 2012 - 07:13
В том то и дело, что данный скрипт создан для хранения гдобальных пременных, а поместить переменную в функцию, значит лишиться ее "глобальности". Другое дело, что я то хочу использовать эти глобальные переменные только там, где этот скрипт подключается к другому скрипту, а TC хочет сказать, что видит эти переменные везде.смотрите, ТестКомплит сначала выполняет не саму запущенную функци/процедуру, а то, что лежит вне её, причем в других юнитах.
Т.е. пример кода VBS:
unit1
Call log.Message("Я не размещен в теле функции")
unit2
function a
....
end function
function b
...
end function
При запуске функций а или b, сначала выполнится сообщение в лог unit1, т.к. содержимое unit1 лежит вне каких-либо функций, на самом верхнем уровне, если можно так сказать. Не помню обязательно ли, чтобы юниты "видели" друг друга. В общем, для решения этой проблемы, надо то выражение в unit1 запинхуть в функцию/процедуру.
#11
Отправлено 09 апреля 2012 - 07:26
В том то и дело, что данный скрипт создан для хранения гдобальных пременных, а поместить переменную в функцию, значит лишиться ее "глобальности". Другое дело, что я то хочу использовать эти глобальные переменные только там, где этот скрипт подключается к другому скрипту, а TC хочет сказать, что видит эти переменные везде.
У вас не получится в глобальных переменных хранить окна и контролы (типа Sys.Process(...).WinFormsObject() ), так как при обращении к таким объектам они должны существовать (в вашем случае - при объявлении переменных).
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#12
Отправлено 09 апреля 2012 - 07:28
Хранить имена объектов как строки это, конечно, выход. Но, честно сказать, не хотелось бы заморачиваться с этим и таскать eval() по всем скриптам. К Name Mapping почему то отношусь с предубеждением (хотелось бы именовать объекты на свой манер, да и пользуюсь в основном полными именами). Что же касается хранения объектов как глобальных переменных в отдельном скрипте, то раньше таких проблем не было и, если их нужно было использовать в каком-то конкретном скрипте, то просто подключал к этому скрипту скрипт с переменными. Возможно, изменил случайно где-то настройки и теперь перед запуском любого скрипта TC проверяет все существующие.Rebz прав. Дело в том, что у вас в том файлике переменные объявлены глобально, т.е. вне функций. Такие переменные вычисляются в самом начале выполения скрипта, перед тем, как собственно функция-тест начинает выполняться. Вот простой аналог вашей ситуации:
answer = 42; function Test() { Log.Message(answer); // 42 }Ошибки в логе из-за того, что не все из объявленных объектов существуют в приложении на момент запуска теста.
Возможные варианты решения проблемы:
* Использовать Name Mapping (ака репозитарий объектов - судя по всему, вы пытаетесь его переизобрести :))
* Хранить имена объектов как строки, и в нужный момент конвертировать их в объекты eval'ом. Так вы избежите ошибок "The object doesn't exist" в начале теста:// Файл с переменными strMainWindow = "Sys.Process(\"GWTalk\").WinFormsObject(\"Main\")"; // Файл теста function Test() { ... MainWindow = eval(strMainWindow); // Конвертируем строку с именем объекта в сам объект MainWindow.Activate(); }
#13
Отправлено 09 апреля 2012 - 07:36
У вас не получится в глобальных переменных хранить окна и контролы (типа Sys.Process(...).WinFormsObject() ), так как при обращении к таким объектам они должны существовать (в вашем случае - при объявлении переменных).
Т.е. даже несмотря на то, что данный unit не подключен к исполняемуму в данный момент скрипту TC все равно будет его проверять? А как быть если я хочу использовать данные переменные только в определенных скриптах и не трогать их во всех прочих случаях?
#14
Отправлено 09 апреля 2012 - 07:37
Т.е. даже несмотря на то, что данный unit не подключен к исполняемуму в данный момент скрипту TC все равно будет его проверять?
Нет, если не подключен - то не будет.
Ну а смысл вам определять переменные в модуле, который не подключается нигде?
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#15
Отправлено 09 апреля 2012 - 10:09
Я имею в виду следующее: допустим у меня есть некоторые переменные, содержащие объекты (окна, контролы), которые используются в 50 скриптах, а в 50 не используются. Я создаю скрипт, содержащий только эти переменные и больше ничего и путем USEUNIT подключаю его к тем скриптам, которым эти переменные нужны. В таком случае, при запуске любого из скриптов, к которым данный файл не подключен, TC по идее не должен его проверять?Нет, если не подключен - то не будет.
Ну а смысл вам определять переменные в модуле, который не подключается нигде?
#16
Отправлено 09 апреля 2012 - 11:43
#17
Отправлено 09 апреля 2012 - 12:04
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#18
Отправлено 09 апреля 2012 - 14:02
До запуска функции не связанного с ним скрипта? И это никак не регулируется в настройках?Только что проверил, Rebz прав: даже если не подключать модуль, то все, что в нем прописано вне функций, вычисляется до запуска функции.
#19
Отправлено 10 апреля 2012 - 06:06
Мне кажется, вы заморачиваетесь. Пользуйтесь Name Mapping'ом - он удобнее, гибче и эффективнее. Если его правильно настроить, конечно - вы же не обязаны использовать тот Name Mapping, что создаётся автоматически. Могу вот порекомендовать приличное видео, показывающее адвансед фичи Name Mapping'а.
Дмитрий
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных