2017-04-19 92 views
0

我真的需要你的幫助,我從3小時以來一直困擾我的問題... 我有一個VBA代碼,打開IE瀏覽器並導航到一個URL。 代碼似乎工作時,我的Microsoft Visual Basic中測試:VBA代碼不工作在UFT

Sub test() 
    On Error Resume Next 
     Set app = CreateObject("InternetExplorer.Application") 
     MsgBox "OpenWindow 1 : " & Err.Number 
     app.Visible = True 
     app.Navigate ("salut.com") 
     result = Err.Number 
     MsgBox "OpenWindow 2 : " & Err.Number 
    On Error GoTo 0 
    If result <> 0 Then 
     Call test 
    End If 
End Sub 

此代碼工作正常在一個Excel宏但每當我執行在UFT完全相同的代碼(統一Functionnal測試),它拋出錯誤:

  • 錯誤-2147467261的導航後的CreateObject(?)
  • 錯誤238後(我認爲這是很正常的,因爲 的CreateObject失敗)

的代碼是完全一樣的,我只是通過網址導航到該功能:

Function openWindow(url) 
    On error resume next 
     Set app = CreateObject("InternetExplorer.Application") 
     app.Visible = true 
     app.Navigate(url) 
     result = Err.number 
    On error goto 0 
    If result <> 0 Then 
     openWindow (url) 
    End If 
End Function 

我實在是沒有的問題是什麼想法......

+1

我想你可能需要閱讀[這](http://stackoverflow.com/documentation/vba/1179/procedure-calls/3818/this-is-confusing-why-not-just-總是使用-括號#噸= 201704191432562970515)。然後將'url'聲明爲'ByVal url As String',所以函數只能使用'String'。現在我們並不確定'Navigate'調用是否失敗,因爲你給了它無法處理的東西 - 顯式的'String'參數會使事情變得更模糊。似乎UFT無法處理'CreateObject'調用? –

+1

我從來沒有使用UFT,但通過任何編程標準,你應該聲明你的變量(並在每個模塊的頂部指定'Option Explicit'),而'app'是'openWindow'函數的依賴關係,這真的只是一個程序,因爲它沒有返回任何東西。因此,不應該創建自己的依賴關係,而應該將其作爲參數注入,而自動化測試應該提供虛擬/模擬實現,以實現您的方法需要使用的任何接口。 [這可能會讓你感興趣](https://rubberduckvba.wordpress.com/2017/03/17/go-ahead-mock-vba/)。 –

+1

此外,你的函數是遞歸的,並且在給定任何無效的'url'或者*任何*錯誤的情況下總會炸掉調用堆棧。 –

回答

0

我找到了一個解決方法:

Function openWindow(urlToNavigate) 
    SystemUtil.Run "iexplore.exe",urlToNavigate 
End Function