【发布时间】:2016-09-25 04:42:40
【问题描述】:
我正在尝试修复使用 Selenium1.0.23 打开站点并登录的 VBA。我的客户说一切正常,除了 VBA 必须输入错误的用户名和密码,因为该站点提供了错误的用户名和密码消息。 现在我得到了脚本并尝试运行它,但我被困在给出“Argument Not Optional”的函数上。下面是脚本:
这是有错误的部分。它突出显示“.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
那么显然这个函数调用了另一个函数,而那个函数又调用了另一个函数。解决问题太麻烦了,我真的需要帮助。
【问题讨论】:
-
setvariation 函数需要传递 3 个参数。根据上面它传递两个
browser, variations(name). -
基于键被称为“名称”的事实,也许调用应该是
ProductVariations.setVariation browser, name, variations(name)? -
如果第三个参数不需要将其设为可选
Public Function setVariation(browser As SeleniumWrapper.WebDriver, ByVal name As String, optional value As String)。 -
@fakedad tnx 试图提供帮助。
-
将第三个参数设为
Optional似乎不是正确的解决方案。它当然可以避免编译时错误,但很可能会导致运行时问题(请参阅我的 cmets @HA560 答案)。我认为您必须尝试理解value参数角色并有意识地传递它。我会先用 fakedad 提议去
标签: vba excel function selenium-webdriver arguments