2017-01-11 8 views
4

私はUFT 12.51を使用して、IE 11でWebベースのアプリケーションを自動化しています。ここに私のシナリオです:
私は自動化しようとしているプロセス(正確には9ページ)を完了するためにいくつかのページを通過する必要があります。 4ページ目で、(ポップアップとして)フレームを開くリンクをクリックします。必要な情報を入力し、ボタンをクリックすると、フレームを閉じる情報が送信され、ブラウザの4ページに戻ります。ここで私の問題が始まります:この時点で、UFTはページ上の要素の認識を停止します。それはページがあるが、それは子の可視オブジェクトを認識しません。手動でリンクを再度クリックしてフレームを再度表示してフレームを閉じると、UFTはページ上のオブジェクトの認識を再開します。 UFTにリンクが表示されていないときにフレームを再び開くためにリンクをクリック(私はURLを持っている)します。私がそれを行うことができれば、私はフレームを閉じることができ、ページ上のオブジェクトは再び表示されます。うまくいけば:)

私は 'devicereplay'、browser.navigate、sendkeysのようなものを試しましたが、ワーキング。残念なことに私のアプリの性質上、スクリーン印刷はできません。どんな助けも大いにありがたく思うのですが、私はこれを2日間運がないまま把握しようとしています。リンクをトリガーするオブジェクトが表示されないときにクリック

コード

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
セキュリティ上の理由から、私は、オブジェクトの名前を変更しますが、コードの上に、私が試してみました、物事のほんの一例ですしています。 dCurrValsは、関数呼び出しの前に事前に設定されている辞書オブジェクトです

+0

は4ページには、すべてのカスタムコントロールではなくWebオブジェクトが含まれていますか? –

+0

それはウェブオブジェクトだけです(テーブル、編集フィールド、リンクなど) – Zac

+0

UFTはなぜそれを認識しないのですか?説明的なプログラミングを試しましたか、手順を記録しましたか? –

答えて

2

多くの研究の後、私はこの問題の解決方法を持っています。 UFTは、ページ上の何かを認識していなかったとして、誰が同じ問題に

アプローチ
に直面しているだけで包み、私はInsightObjectを使用することにしました。InsightObjectを使用する利点は、限り、オブジェクトが表示されているようということです、UFT皮肉なことに、これは欠点でもあります:オブジェクトが画面上に見える必要があるので、私は以下のUDFを書くことにしました。 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

それは良い叫び@モッティです。私は 'Browser(" .. ")。RefreshWebSupport'を試しましたが、残念ながらそれは機能しませんでした(ちょうど 'General Error'ポップアップが表示されました)。あなたの提案によれば、私が今週の解決策を得られなければ、私はUFTのバグとしてそれを上げます – Zac

関連する問題