QTP: тег HTML распознается, но функция щелчка не имеет ответа
В QTP11 у меня есть функция, как показано ниже, для обработки кнопки выпадающего списка. Структура HTML выглядит следующим образом:
Sub FindDropdown (text) 'получить страницу и текст в качестве счетчика параметров = 0
Set oDesc = Description.Create()
oDesc("html tag").Value = "tr"
Set trContent = Browser("Change Management - SAP").Page("Change Management - SAP").ChildObjects(oDesc)
TRSum = trContent.Count()
For i = 0 To TRSum - 1
Set objPage = trContent(i).Object
Set objTag = objPage.GetElementsByTagName("td")
spanSum = objTag.Length - 1
For intCtr = 0 to spanSum
strLink = objTag(intCtr).InnerText
If strLink = text Then
trContent(i).Object.click()
End If
Next
Next
Set oDesc=nothing
End Sub
Несмотря на то, что я проверил, и с внутренним элементом Select All можно было распознать, я не смог выполнить действие (например, click), и на самом деле код: trContent(i).Object.click(), похоже, не имел никакого эффекта.
Это имеет какое-либо отношение к месту слушателя / обработчика события? например слушатель не является элементом TR или TD?
2 ответа
Я полностью испробовал четыре метода для запуска прослушивателя события щелчка: 1. Распознавание QTP: просто с помощью TO, содержащегося в репозитории объектов, и.click для запуска прослушивателя щелчка. Нет ответа; 2. Использование метода SendKeys: он работает в этом действии, в то время как когда я вызывал действие из основного действия, он не работает; 3. Использование вызова DOM. Как и приведенные выше сценарии в вопросе, я не смог запустить обработчик щелчков;
Наконец-то я обратился к устройству воспроизведения. Идея получить позицию во время выполнения элемента и нажать на эту позицию. Это как-то низкоуровневая функция, и она работает гладко с моей стороны. Вот мой рабочий скрипт:
Set objReleaseTR = Browser("Change Management - SAP").Page("Change Management - SAP_3").WebElement("Release all Transport")
Set objDeviceReplay = CreateObject("mercury.devicereplay")
x = objReleaseTR.GetROProperty("abs_x")
y = objReleaseTR.GetROProperty("abs_y")
objDeviceReplay.MouseClick x + 5, y + 5, 0
Set objDeviceReplay = nothing
Надеюсь, что это может быть полезно для парней, которые сталкиваются с той же проблемой.
Сначала проверьте, есть ли у вас прослушиватель кликов или нет. Необходимо.
Вы можете попробовать приведенный ниже код trContent(i).Object.FireEvent("onclick")