2016-09-25 409 views
-1

我正在嘗試修復使用Selenium1.0.23打開站點和登錄的VBA。我的客戶說,除了VBA必須輸入錯誤的用戶名和密碼外,所有的事情都在他的最後,因爲該網站提供了錯誤的用戶名密碼信息。 現在我得到了腳本,並嘗試運行它,但我卡住了「參數不可選」的函數。以下是腳本:VBA函數獲取「參數不可選」錯誤

以下是有錯誤的部分。它突出了「.setVariation」部分。

Private Function setVariationOnPage(browser As SeleniumWrapper.WebDriver, variations As Scripting.Dictionary) As Long 
Dim name 
For Each name In variations.keys 
    ProductVariations.setVariation browser, variations(name) 
Next name 
End Function 

我相信上面的函數調用是一個單獨的模塊上的另一個功能,因爲有一個模塊名稱ProductVariations和一個名爲setvariation在它的功能。

Public Function setVariation(browser As SeleniumWrapper.WebDriver, ByVal name As String, value As String) 
On Error GoTo setVariationError 

Dim li As WebElement 
Dim lis As Collection 

Set lis = getVariationListItems(browser, name) 
If lis Is Nothing Then 
    GoTo setVariationError 
    Exit Function 
End If 


For Each li In lis 

    Dim link As WebElement 
    Set link = getLinkFromVariationListItem(li) 

    If LCase(Trim(getVariationValueNameFromListItem(li))) = LCase(Trim(value)) Then 
     If InStr(li.getAttribute("class"), "active") = 0 Then 
      link.Click 
      ScrapingUtil.waitForPageToLoad browser 
      If InStr(li.getAttribute("class"), "active") = 0 Then 
       GoTo setVariationError 
      End If 
     End If 
     Exit Function 
    End If 
Next li 

setVariationError: 
Dim msg As String 
msg = "Unable to set variation: ""{name}"" = ""{value}""" 
msg = Replace(msg, "{name}", name) 
msg = Replace(msg, "{value}", value) 
Err.Description = msg 
Err.raise 1 
End Function 

然後顯然這個函數調用另一個函數,該函數調用另一個函數。對它進行故障排除是非常困難的,我真的需要幫助。要傳遞

+2

setvariation功能需要3個參數。根據上面它通過兩個「瀏覽器,變體(名稱)'。 – HA560

+0

基於這樣一個事實,即這些鍵被稱爲「名稱」,也許這個調用應該是'ProductVariations.setVariation browser,name,variations(name)'? – fakedad

+0

如果第3個參數不需要使其成爲可選'Public Function setVariation(瀏覽器爲SeleniumWrapper.WebDriver,ByVal name As String,可選值爲String)'。 – HA560

回答

-1

使參數爲可選..

Public Function setVariation(browser As SeleniumWrapper.WebDriver, ByVal name As String, optional value As String). 
+1

一起使用,但在'If LCase(Trim(getVariationValueNameFromListItem(li)))= LCase(Trim(value))Then'中使用'value'參數。使它成爲'Optional'將會把它設置成一個空字符串''「'只要不傳遞第三個參數(比如'ProductVariations.setVariation browser,variations(name)')就可以調用該函數,因此這個檢查總是可能導致' False'這種方式永遠不會觸發它的'If-Then-Else'塊中的代碼 – user3598756

+0

是的......我同意,但它已在@winmac中起作用。 – HA560

+0

這個網站是和將會有很多人蔘加,而不是提問者。因此,儘管後者可能主要通過其有用性對答案進行評分,但其他用戶會根據其準確性和完整性對​​其進行評價,以支持所有將碰到此帖的用戶。 – user3598756