2017-01-11 2 views
4

Я использую UFT 12.51 для автоматизации веб-приложения на IE11. Вот мой сценарий:
Мне нужно пройти через несколько страниц, чтобы завершить процесс, который я пытаюсь автоматизировать (точнее, 9 страниц). На странице 4 я нажимаю ссылку, которая открывает фрейм (как всплывающее окно). Я ввожу требуемую информацию и нажимаю кнопку, чтобы отправить информацию, которая закрывает рамку, и возвращает меня на страницу 4 в браузере. Здесь возникают мои проблемы: на этом этапе UFT перестает распознавать любые элементы на странице. Он забирает, что есть страница, но не признает, что у нее есть дочерние «видимые» объекты. Если я снова вручную перейду по ссылке, чтобы снова отобразить рамку и закрыть кадр, UFT снова начнет распознавать объекты на странице. Есть ли способ, с помощью которого я могу вызвать ссылку (я имею URL-адрес), чтобы снова открыть кадр, когда ссылка не видна UFT? Если я смогу это сделать, я смогу закрыть Рамку, и объекты на странице будут снова видны. Надеюсь :)

Я пробовал такие вещи, как «devicereplay», browser.navigate, sendkeys, но ни один из них не является за работой. К сожалению, из-за характера моего приложения, я не могу предоставить никаких отпечатков на экране. Любая помощь была бы очень признательна, поскольку я пытался понять это в течение 2 дней без везения.Trigger a Link Нажмите, когда объект не отображается

Код

Dim oDR : Set oDR = CreateObject("Mercury.DeviceReplay") 
' Lets get the X and Y chordinates for 'Next Step' button 
Dim iX, iY 

iX = Browser("MyBrowser").Page("MyPage").Link("NextStep").GetROProperty("x") + 5 
iY = Browser("MyBrowser").Page("MyPage").Link("NextStep").GetROProperty("y") + 5 

If MyFunction(dCurrVals, sErrorMsg) Then 
    LOG_ReportEvent "PASS", "Set Investment/Allocate", "Successfully initialised page" 
Else 
    LOG_ReportEvent "FAIL", "Set Investment/Allocate", sError 
End If 

'Browser("MyBrowser").Page("MyPage").Object.body.doscroll "scrollbarPageUP" 
wait(1) 

oDR.MouseMove iX, iY 
oDR.MouseClick iX, iY, 0 

Set oDR = Nothing 

Browser("MyBrowser").RefreshWebSupport 
Wait(1) 
Browser("MyBrowser").Page("MyPage").Link("Search") 
'Browser("MyBrowser").Navigate "MyURL" 
'Browser("MyBrowser").Page("MyPage").Sync 
'Browser("MyBrowser").Page("MyPage").Link 
'Wait(1) 
'Browser("MyBrowser").Page("MyPage").Link("Search") 
'Browser("MyBrowser").Page("MyPage").WebElement("Search").FireEvent "onclick" 


ПРИМЕЧАНИЕ
По соображениям безопасности, я изменил имена объекта, но выше код всего лишь пример того, что я пробовал. dCurrVals - объект словаря, который предварительно заполняется перед вызовом функции

+0

ли страница 4 содержит все пользовательские элементы управления, а не веб-объекты? –

+0

Это только веб-объекты (т. Е. Таблицы, поля редактирования, ссылки и т. Д.) – Zac

+0

Тогда почему UFT не признает это? Пробовали ли вы описательное программирование или пытались записать свои шаги? –

ответ

2

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

подход
Как UFT было ничего не узнавая на странице, я решил использовать InsightObject. Преимущество использования InsightObject в том, что до тех пор, пока объект виден, UFT найдет его на странице. По иронии судьбы, это тоже недостаток: объект должен быть видимым на экране. Поэтому я решил написать ниже UDF. UD F перемещается в верхнюю часть страницы, затем выполняет поиск для InsightObject. Если объект не найден, он перемещает страницу вниз и выполняет другой поиск объекта. Он повторяет этот процесс до тех пор, пока он не обнаружит, что достигнут предел объекта или счетчика. Если он находит InsightObject, он нажимает на объект и затем выполняет проверку для указанного объекта на странице.

UDF

Public Function EnablePage(ByVal oInsightObject, ByVal oCheckObject, ByVal iPgMoveCount ByRef sError) 
    LOG_Write vbNewLine & "EnablePage" 

    Dim oWS: Set oWS = CreateObject("WScript.shell") 
    Dim iC 
    Dim bFoundIO 

    ' Set default values 
    EnablePage = True 
    bFoundIO = False 

    ' Move to the top of the page 
    For iC = 1 To CInt(iPgMoveCount) 
     oWS.SendKeys "{PGUP}" 
     Wait 0, 500 
    Next 

    ' Navigate to the bottom of the page to find the object 
    For iC = 1 To CInt(iPgMoveCount) 
     ' Check if Insight object exists 
     If oInsightObject.Exist(1) Then 
      bFoundIO = True 
      oInsightObject.Click 
      Wait 0, 500 
      Exit For 
     Else 
      oWS.SendKeys "{PGDN}" 
      Wait 0, 500 
     End If 
    Next 

    ' Check if Insight object was found 
    If bFoundIO Then 
     ' Check if object to check is visible 
     If Not oCheckObject.Exist(2) Then 
      EnablePage = False 
      sError = "Clicked on Insight Object but unable to find the object to check" 
     End If 
    Else 
     EnablePage = False 
     sError = "Unable to find the Insight Object" 
    End If 

    ' Clear objects 
    Set oWS = Nothing 

End Function 
1

Это звучит как ошибка в UFT, вам следует обратиться в службу поддержки HPE.

Обходной путь для таких случаев доступен в недокументированном Browser("...").RefreshWebSupport method, который сообщает UFT повторно подключиться к DOM браузера. Это может помочь, но поскольку это недокументировано, нет никаких гарантий :(

+1

Это хороший крик @Мотти. Я попробовал «Браузер (« .. »). RefreshWebSupport', но, к сожалению, он не работал (просто отобразилось всплывающее окно« Общая ошибка »). Согласно вашему предложению, если я не получу решение на этой неделе, я подниму его как ошибку в UFT – Zac

Смежные вопросы