2017-01-11 1 views
4

J'utilise UFT 12.51 pour automatiser une application Web sur IE11. Voici mon scénario:
Je dois parcourir quelques pages pour compléter le processus que j'essaie d'automatiser (9 pages pour être précis). Sur la page 4, je clique sur un lien qui ouvre un cadre (sous forme de popup). Je saisis les informations requises et je clique sur le bouton pour soumettre l'information qui ferme le cadre et me renvoie à la page 4 du navigateur. Voici où mes problèmes commencent: à ce stade, UFT cesse de reconnaître les éléments sur la page. Il détecte qu'il y a une page mais ne reconnaît pas qu'il a des objets 'visibles'. Si je clique à nouveau manuellement sur le lien pour afficher à nouveau le cadre et les ferme le cadre, UFT commence à reconnaître à nouveau les objets sur la page. Y at-il un moyen de déclencher un clic de lien (j'ai l'URL) pour ouvrir à nouveau le cadre lorsque le lien n'est pas visible à UFT? Si je peux le faire, je serai en mesure de fermer le cadre et les objets sur la page seront visibles à nouveau .. heureusement :)

J'ai essayé des choses comme 'devicereplay', browser.navigate, sendkeys mais aucun d'eux travail. Malheureusement, en raison de la nature de mon application, je ne peux pas fournir de sérigraphie. Toute aide serait grandement appréciée car j'ai essayé de comprendre cela pendant 2 jours maintenant sans aucune chance.Déclenchement d'un clic de lien lorsqu'un objet n'est pas visible

code

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" 


NOTE
Pour des raisons de sécurité, j'ai changé le nom de l'objet, mais le code ci-dessus est juste un exemple de ce que j'ai essayé. dCurrVals est un objet de dictionnaire qui est pré-rempli avant l'appel de fonction

+0

Est-ce que la page 4 contient tous les contrôles personnalisés et non des objets Web? –

+0

Il s'agit uniquement d'objets Web (tables, champs d'édition, liens, etc.) – Zac

+0

Alors pourquoi UFT ne le reconnaît-il pas? Avez-vous essayé la programmation descriptive ou essayé d'enregistrer vos démarches? –

Répondre

2

Après beaucoup de recherches, j'ai une solution à ce problème Je ne peux pas penser à un autre moyen de contourner ce problème. juste au cas où quelqu'un est confronté à d'autre le même problème

approche
comme UFT ne reconnaissait rien sur la page, j'ai décidé d'utiliser InsightObject. l'avantage de l'utilisation InsightObject est que tant que l'objet est visible, UFT Je vais le trouver sur la page, ironiquement, c'est un inconvénient: l'objet doit être visible sur l'écran, j'ai donc décidé d'écrire le UDF ci-dessous. F se déplace en haut de la page, puis effectue une recherche pour le InsightObject. Si l'objet n'est pas trouvé, il déplace la page vers le bas et effectue une autre recherche de l'objet. Il répète ce processus jusqu'à ce qu'il trouve l'objet ou que la limite du compteur soit atteinte. S'il trouve le InsightObject, il clique sur l'objet, puis vérifie l'objet spécifié sur la page.

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

Cela ressemble à un bug dans UFT, vous devez contacter le support de HPE.

Une solution de contournement pour de tels cas est disponible dans le Browser("...").RefreshWebSupport method non documenté qui indique à UFT de se reconnecter au DOM du navigateur. Cela peut aider, mais comme il n'est pas documenté il n'y a aucune garantie :(

+1

C'est un bon cri @Motti. J'ai essayé 'Browser (" .. "). RefreshWebSupport' mais malheureusement cela n'a pas fonctionné (juste affiché un popup 'General Error'). Selon votre suggestion, si je n'obtiens pas de solution cette semaine, je l'évoquerai comme un bug dans UFT – Zac