Несоответствие типов при вызове функции в qtp

Я использую QTP 11.5 для автоматизации веб-приложения. Я пытаюсь вызвать действие в qtp через скрипт драйвера, как показано ниже:

RFSTestPath = "D:\vf74\D Drive\RFS Automation\"

LoadAndRunAction RFStestPath и LogInApplication, "Action1", oneIteration

Внутри LogInApplication (Action1) я вызываю функцию входа в систему как:

Вызов fncLogInApplication(strURL,strUsesrName,strPassword)

Определение fncLogInApplication записано в файле fncLogInApplication.vbs. Когда я связываю файл fncLogInApplication.vbs со скриптом драйвера, я могу выполнить свой код без каких-либо ошибок. Но когда я отвязываю файл .vbs от драйвера и связываю его с тестом LogInApplication, я получаю «Несоответствие типов:« fncLogInApplication »»

Может ли кто-нибудь помочь мне в ассоциации, пожалуйста. Я хочу, чтобы fncLogInApplication выполнялся, когда я связываюсь с LogInApplication, а не с основным скриптом драйвера.

Пожалуйста, прокомментируйте, если вам нужна дополнительная информация


person Vamshi G    schedule 13.10.2014    source источник
comment
Не зная, чего именно вы хотите достичь и почему, трудно дать полезный ответ...   -  person TheBlastOne    schedule 13.10.2014
comment
Во-первых, спасибо за ответ. Что я пытаюсь сделать, так это... Я пытаюсь последовательно вызывать элементы действий (список действий, которые я выполняю из листа Excel). В каждом экшене я пишу тестовый скрипт и вызываю нужные функции. Я могу успешно работать, только если я свяжу все эти функции с основным сценарием драйвера. Теперь меня беспокоит то, что в будущем я собираюсь написать много функций. Если я свяжу все эти функции с основным драйвером... тогда выполнение может быть медленным и зависнуть во многих точках. Я хочу связать только необходимые функции с действием indiv, чтобы драйвер не был перегружен.   -  person Vamshi G    schedule 14.10.2014
comment
Отложите устранение симптома перегрузки до тех пор, пока он у вас не появится. Не чините то, что не сломано.   -  person TheBlastOne    schedule 15.10.2014
comment
Спасибо @TheBlastOne   -  person Vamshi G    schedule 15.10.2014


Ответы (1)


В любой момент времени активен только один набор связанных библиотек: это всегда самый внешний тест.

Это означает, что если тест A вызывает тест B, тест B будет выполняться с загруженными библиотеками на основе списка связанных библиотек теста A, а не B.

Это также означает, что если B зависит от библиотеки, а B связан с этой библиотекой, но вызывается из теста A (который не связан с этой библиотекой), тогда B не сможет вызвать (найти) функцию, поскольку связанные библиотеки B никогда не загружались (только те, что из А). (Как и А, естественно.).

Если вы все еще заинтересованы: «Несоответствие типов» — это плохой способ QTP (или VBScript) сообщить вам: «Вызываемая функция неизвестна, поэтому я уверен, что вместо этого вы имели в виду разыменование переменной массива, и указанная вами переменная равна пустой, поэтому она не является массивом и, следовательно, не может быть разыменована как переменная массива, что я называю «несоответствием типов». Это рассуждение справедливо, учитывая синтаксическое дерево VB/VBScript: вызовы функций и разыменование переменных массива не могут быть формально разграничены. Синтаксически они очень похожи или в большинстве случаев идентичны. Так что будьте готовы обрабатывать «Несоответствие типов», например, сообщение «Ссылка на неизвестную функцию», которое VB/VBScript никогда не отображает при создании кода VBScript.

Однако вы можете загрузить нужную библиотеку в тестовом коде B (например, используя LoadFunctionLibrary), но это по-прежнему позволяет A вызывать функции из этой библиотеки после того, как B загрузил ее и вернулся из вызова A. Однако это и все возможные варианты этой процедуры имеют побочные эффекты для таких аспектов, как отладка, прямые ссылки и видимость глобальных переменных, поэтому я бы не рекомендовал этого делать.

Дополнительные замечания:

  • Нет веской причины использовать CALL. Просто вызовите подпрограмму или функцию.
  • Если вы вызываете функцию и используете возвращаемый ею результат, вы должны заключать аргументы в круглые скобки.
  • Если вы вызываете sub (или function и не используете возвращаемый результат), вы не должны включать аргументы в круглых скобках. Если sub или function принимает только один аргумент, может показаться, что вам разрешено заключать его в скобки, но это не так. В этом случае аргумент просто трактуется как термин в скобках.
  • Только что перечисленные аспекты «заключения в скобки» аргумента могут создавать очень неприятные ошибки, особенно если аргумент byRef, также из-за (но не ограничиваясь) того факта, что VBScripts, к сожалению, позволяет вам передавать значения для аргумента byRef (где ожидается переменный параметр). ), поэтому, как правило, рекомендуется ставить скобки только там, где они нужны (т. е. там, где они абсолютно необходимы).
person TheBlastOne    schedule 13.10.2014