Чувствительность к регистру в вопросе QTP 11: разные результаты с разными случаями в VBScipt - PullRequest
3 голосов
/ 17 августа 2011

Сегодня я обнаружил странное поведение в QTP 11: выражение

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.ParentNode.ParentNode

Дает ошибку: требуется объект ".Object.ParentNode"

Но выражение

Browser().Page().WebElement("PositionManagerContainer").WebElement("LoadingMessage").Object.parentNode.ParentNode

(Разница в случае члена ParentNode .Object) является правильным и работает без ошибок.

Браузером является Firefox.В IE все работало нормально.

Может кто-нибудь объяснить, почему это происходит?Просто для интереса.

1 Ответ

5 голосов
/ 17 августа 2011

Это очень хороший (и тонкий) момент.В целом .Object разрешает доступ к собственному объекту в тестируемом приложении.Поскольку QTP основан на VBScript, это означает, что свойство .Object тестовых объектов имеет значение IDispatch.

. При работе с IE QTP может передавать объект MSHTML , которыйIE предоставляет (и поддерживает IDispatch), так как MSHTML предназначен для работы с VBScript, эти объекты нечувствительны к регистру.Однако при работе с Firefox отсутствует IDispatch поддерживающий объект, который открывается браузером.Поэтому QTP должен создать прокси-объект, который реализует IDispatch, запрашивая объект, предоставляемый Firefox.Поскольку Firefox предназначен для работы с JavaScript (который * чувствителен к регистру), этот прокси-объект автоматически учитывает регистр.

Ошибка, которую вы увидели, произошла из-за того, что первый ParentNode вернул Empty поэтому второй .ParentNode выдал ошибку.

Поэтому при использовании .Object с Firefox вы должны использовать правильный корпус для свойств и методов, к которым вы обращаетесь.

...