Ошибка несоответствия типов QTP VBScript в функции без аргументов - PullRequest
0 голосов
/ 14 июля 2011

Я столкнулся с досадной проблемой в QTP (Quick test pro) с использованием VBScript.

Я определил эту подпрограмму в VBScript (я также попытался определить ее как функцию с тем же результатом):

Sub KillProcess()
  KillprocessIE = "The process i want to kill"
  Set ProcessList2 = GetObject("winmgmts://.").InstancesOf("win32_process")
  For Each Process In ProcessList2
    If Process.Name = KillProcessIE Then
      Process.Terminate
      Exit for
    End If
  Next
End Sub

Но когда я пытаюсь запустить его, используя

call KillProcess()
KillProcess()
KillProcess

, я получаю сообщение об ошибке: «Typer stemmer ikke overens:« KillProcess »« в переводе с датского означает что-то вроде »Типы не совпадают: «KillProcess». Я предполагаю, что это ошибка несоответствия типов, но из-за перевода я не могу быть уверен.

О каких типах идет речь? У меня нет аргументов в вызове функции, и яя не присваиваю какие-либо значения чему-либо?

Следует также сказать, что если я запускаю точно такой же код напрямую, не определяя его как функцию, он работает без проблем.

Ответы [ 2 ]

3 голосов
/ 14 июля 2011

Всякий раз, когда вы вызываете подпрограмму или функцию, которая не определена, вы получаете ошибку несоответствия типов.

Даже если это само по себе чудо (для которого я мог бы найти разумныйобоснование только для функций, а не для подпрограмм) это указывает на то, что в вашем конкретном сценарии KillProcess не был известен в сценарии, в котором вы его вызвали.

Возможные причины:

  • Объявление KillProcess находилось в библиотеке функций, которая не была указана в диалоговом окне настроек связанной библиотеки функций.
  • Объявление KillProcess было активным, но ваши вызовы содержали одну или несколько опечаток, например «KillProccess» или аналогичных.Вещи.

Как указал Мотти, размещенный вами фрагмент кода выглядит нормально, поэтому должен быть какой-то другой глюк.

Еще один совет относительно вспомогательных функций и функций: Имейте в виду, что вы обычно никогда не вызываете Sub в скобках для аргументов.Если вы укажете их, они будут считаться частью терма, который нужно оценить, и, поскольку

X term

совпадает с

X (term)

, следовательно, это не приведет к ошибкесообщение в этом случае.Однако для подпрограмм с двумя или более аргументами указание всех фактических аргументов в одной паре скобок, как в

Y (term1, term2)

, приводит к ошибке, что-то вроде «невозможно вызвать подпрограмму с аргументами в скобках», или около того.Это трудно понять, если учесть, что один аргумент действительно может быть указан в скобках.

(Для более полного обзора по теме паратеза см. ByRef и ByVal в VBScript и связанные вопросы).

Общее предложение: Всегда используйте

option explicit

в начале всех скриптов (особенно библиотек функций).RTFM это при необходимости.Это может выглядеть как дополнительная работа (потому что это заставляет вас объявлять все переменные, прежде чем вы сможете их использовать), но полезно избегать скрытых ошибок.

1 голос
/ 28 июня 2013

Я думаю, что вы столкнулись со странным поведением QTP, но, хотя логика, когда вы понимаете, почему.

Причина, по которой это происходит, вероятно, потому, что вы "запускаете с шага" вызываете KillProcess () и имеете функциюопределены выше как:

Sub KillProcess()
        .
        .
        .
End Sub

call KillProcess()

Если вы запустите код из «Call KillProcess ()», QTP вернет «Ошибка выполнения» «Несоответствие типов»

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

call KillProcess()

Sub KillProcess()
        .
        .
        .
End Sub

Тогда QTP «знает» вызываемую вами функцию и выполнит скрипт так, как должен.

Причина этого в том, что при использовании«Выполнить с шага» читает только строку кода с шага и ниже, а не то, что вы написали выше.

...