HP QTP 10: тестирование веб-приложений - SomeObj.FireEvent («OnCLick») работает, SomeObj.Object.FireEvent («OnCLick») не работает - PullRequest
1 голос
/ 12 января 2011

У меня полнофункциональное веб-приложение с ExtJS.Имеет многократный выбор списка (созданный с помощью JS + CSS).Я хочу щелкнуть по некоторому элементу в этом списке с помощью HP QuickTest Pro 10 с Internet Explorer 6. Я добавил этот элемент в репозиторий объектов и обнаружил, что работает следующий код - выбирает какой-то элемент:

Browser("blah").Page("blah").WebElement("SomeElem").Click

следующий код такжеработает:

Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onMouseDown")
Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onMouseUp")
Browser("blah").Page("blah").WebElement("SomeElem").FireEvent("onClick")

Но я хочу выбрать несколько пунктов, используя метод shift + click.Я не знаю, как это сделать :( У меня есть несколько вопросов:

  1. Как выполнить щелчок мышью по нескольким веб-элементам с нажатой клавишей Shift?
  2. Я попытался сделать это, используя CreateEventObject + shiftKey со значением true, но метод (выполнить fireEvent для объекта DOM, а не для объекта из репозитория объектов) не работает:

    Browser ("blah"). Page ("бла "). WebElement (" SomeElem "). Object.FireEvent (" onClick ")

В чем разница между WebElement (" Элемент "). FireEvent (" OnClick ") и WebElement("Элемент"). Объект .FireEvent ("OnClick")?

Пожалуйста, помогите кому-нибудь, потому что я много боролся с этой проблемой, но не дал результата.

Спасибо!

1 Ответ

2 голосов
/ 12 января 2011

Существует несколько различий между WebElement(...).FireEvent и WebElement.Object.fireEvent: первый запускает функцию QTP, которая выполняет все виды работ, а второй непосредственно переходит к элементу DOM. Вот список нескольких вещей, которые делает QTP, но которые не выполняются в собственном методе DOM (может быть и больше).

  1. Если элемент не виден, QTP делает его видимым (это включает в себя активацию вкладки и прокрутку в представлении)
  2. Поддержка QTP воспроизведение устройства , в этом случае оно будет перемещать курсор и имитировать реальный щелчок (это дает вам лучшую симуляцию взаимодействия реальных людей с приложением)
  3. QTP записывает в отчет, что он выполнил FireEvent шаг

Что касается вашей проблемы, в целом вы можете использовать собственный метод DOM для передачи объекта события, но когда я попробовал его, я не смог заставить его работать из QTP

set doc = Browser("B").Page("P").WebElement("W").Object.ownerDocument
set ev = doc.createEventObject()
ev.shiftKey = True

Browser("B").Page("P").WebElement("W").Object.FireEvent "onclick", ev

Однако при запуске из браузера работает нечто эквивалентное.

Начиная с QTP11, есть поддержка запуска файлов JavaScript из скрипта с использованием Page("P").RunScript, пока вы не сможете смоделировать эту возможность вручную. Следующий фрагмент кода работает для меня (я использую объект из репозитория, чтобы получить IE 10-специфичный uniqueID элемента, поэтому мне больше не нужно его идентифицировать).

' Use QTP's object identification instead of reproducing the logic in JavaScript
id = Browser("B").Page("P").WebElement("W").Object.uniqueID 

' Construct JavaScript script
script = "var e = document.createEventObject(); e.shiftKey = true; " & _
         "document.getElementById('" &id & "').fireEvent('onclick', e);"

' Run it on the browser
Browser("B").Page("P").Object.parentWindow.eval script

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

...