HP QTP 11: сбой выполнения скрипта при работе в Firefox, но средство просмотра отладки показывает результат работы - PullRequest
3 голосов
/ 17 августа 2011

Я пытаюсь запустить нашу автоматизацию, написанную для IE, на Firefox 3.6 и сталкиваюсь с такой неприятной проблемой: У меня есть код:

Set cellDataItems = Browser().Page().WebElement().Object.getElementsByTagName("div")
For i = 0 to cellDataItems.length -1 
    MsgBox (cellDataItems.item(i).innerHTML)
Next

Когда скрипт переходит в строку с MsgBox, если останавливается с ошибкой:

TypeError: obj [FuncName] не определено

Затем я нажимаю отладку, вижу, что я = 0. Я добавил cellDataItems.item (i) .innerHTML в средство просмотра отладки, оно показывает его значение (см. Ниже) без ошибок. Кроме того, cellDataItems.item (i) .textContent прекрасно отображается в средстве отладки.

Значение cellDataItems.item (i) .innerHTML, когда i = 0, равно:

<table class="x-grid3-row-table" style="width: 100px;" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="x-grid3-col x-grid3-cell x-grid3-td-0 x-grid3-cell-first " style="width: 98px; text-align: left;" tabindex="0"><div class="x-grid3-cell-inner x-grid3-col-0" unselectable="on"><div align="left">AUD/USD</div></div></td></tr></tbody></table>

Итак, почему скрипт завершается неудачно с этой ошибкой, а средство просмотра отладки показывает это? Спасибо!

Обновление В консоли Firefox я вижу больше деталей:

Ошибка: obj [FuncName] не определен. Исходный файл: Файл: /// C: /Program%20Files/HP/QuickTest%20Professional/Bin/Mozilla/Common/components/ScriptWrapperXPCOM.js -> Файл: /// C: /program%20files/hp/quicktest%20professional/bin/JSFiles/mzDotObj.js Линия: 76

обновление 2:

MsgBox (eval(cellDataItems.item(i).innerHTML)) 

Когда я использую eval - это работает! Может быть, есть какой-нибудь способ отладки кода расширения QTP для firefox?

обновление 3: Как это возможно: выражение «colItem.className» имеет значение «x-панель», но после того, как я выполню выражение

sClassName = colItem.className

значение sClassName является пустым: line 570 was executed, but sclassName is still empty

Это работает: sClassName = eval ("colItem.className")

Как это вообще возможно? !!!!!! Или я схожу с ума, или у QTP 11 есть большой дефект внутри!

1 Ответ

0 голосов
/ 07 сентября 2011

Я нашел причину и нашел обходной путь.

Итак, где-то в связанной библиотеке у меня есть код:

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.

...