Я нашел причину и нашел обходной путь.
Итак, где-то в связанной библиотеке у меня есть код:
Set itemCol = windows.item(i) ' line 1
sClassName = itemCol.className ' line 2
А в другой библиотеке у меня есть выражение:
arrMyTradeInfo=GlobalDictionary.Item("gdTrades")
С этим кодом при выполнении строки 1 QTP выдаст ошибку:
TypeError: obj [FuncName] не определено
Но если я поменяю код на (обратите внимание на имя функции "item" - теперь он в нижнем регистре) - строка 1 будет работать !!!:
arrMyTradeInfo=GlobalDictionary.item("gdTrades")
Но тогда он не будет работать в строке 2 - см. Обновление 3 в самом вопросе - значение sClassName будет пустым, но itemCol.className может содержать строку. В другой библиотеке у меня есть функция (обратите внимание на параметр className):
Function GetFirstObjectByClassName(byVal Parent, byVal className, byVal tag)
Dim result
result = getElementsByClassName(Parent, className, tag)
If (UBound(result)<0) Then
set GetFirstObjectByClassName = Nothing
Else
set GetFirstObjectByClassName = result (0)
End If
End Function
Когда я изменил имя на другое (например, csName), строка 2 работает !!!
Function GetFirstObjectByClassName(byVal Parent, byVal csName, byVal tag)
Dim result
result = getElementsByClassName(Parent ,csName, tag)
If (UBound(result)<0) Then
set GetFirstObjectByClassName = Nothing
Else
set GetFirstObjectByClassName = result (0)
End If
End Function
Итак, это обходной путь. Я не могу объяснить, почему это происходит, я думаю: VBScript не является строго типизированным. И в QTP они реализовали что-то вроде «вызовов виртуальных функций», как в C ++ и Java, на основе некоторой информации о типах во время выполнения, но для объектов DOM из Firefox произошло некоторое столкновение, они неправильно собрали RTTI.
Итак, главный вывод и проблема: только один неправильный регистр букв (Item вместо item) может сломать ваш код, который работает с домом firefox и даст вам много приятных часов отладки! SO , будь осторожен!
Откроется тикет с поддержкой HP.