2016-09-25 408 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