非常简短的故事,我正在尝试开发一个MS Excel AddIn,以允许未受过教育的用户(开放解释)创建基于Excel的脚本,Visual Basic(是的不是C#)可以基本解析为单个部分和通过Selenium命令发送到浏览器。到目前为止,我已经取得了相当大的成功。虽然有点笨拙,但这是第1轮,我只与Selenium合作了一个星期。
到目前为止,我已经能够使用CallByName函数来调用各种Selenium方法,其中每个_argument都是从源自电子表格单元格中的值的更高级别处理程序传递的。
Dim eleActionElement as Remote.RemoteWebElement = Nothing
eleActionElement = driver.FindeElement(By.Id("PresentObjectID"))
CallByName(eleActionElement, _strAction, CallType.Method, _strActionArg)
最初我遇到了Bys的问题:
Dim myBy As By = CallByName(By, _strBy, CallType.Method, _strByArg)
Intelisense警告“By”是类类型,不能用作表达式。幸运的是,每个类型都有各自的方法,因此我能够通过以下方式有效地检索元素:
Public Function DriverFindElementBy(_strBy As String, _strByArg As String) As Remote.RemoteWebElement
Dim strElementBy As String = "FindElementBy" & _strBy
Dim eleWebElement As Remote.RemoteWebElement = Nothing
eleWebElement = CallByName(ThisAddIn.driver, strElementBy, CallType.Method, _strByArg)
Return eleWebElement
End Function
不幸的是,我还没有找到让ExpectedConditions工作的方法。我最好的猜测(很多)是:
Public Function WaitOnCondition(_strCondition As String, _strBy As String, _strByArg As String)
Dim myExpectedConditionObj As ExpectedConditions
CallByName(myExpectedConditionObj, _strCondition, CallType.Method)
waitDefault.Until(CallByName(myExpectedConditionObj, _strCondition, CallType.Method))
If strTestResult.Length = 0 Then
Return "Success"
Else
Return strTestResult.ToString
End If
End Function
Intelisense警告说这可能会导致NullReference,但确实如此。我可以看到对象是如何实例化的,但是同样的方法适用于RemoteWebElement。如果研究了Selenium文档,两者都是类类型;所以我认为问题与ExpectedConditions的各种方法有关,By类接收并返回不同数量和类型的参数。可能是因为这两个类都是委托。这可能是我正在做的一些简单的错误 - 尽管如此,我已经用反复的思想写了十几次这些函数,“geez,这应该有效。”有一次,你认为我会盲目地把它弄好。
我当然不是.Net专家,高级技术有时令人费解,但我确实研究人们提供的解决方案,并且经常需要去扩展我的技能;所以请知道,不会有任何帮助,也不会白费。
如果您提供C#(或Java或Python)解释,请告诉我,如果您知道/不知道或不确定它是否适用于VB,请告诉我。我在高级主题中面临的最大挑战是在C#和VB之间没有交叉的狭窄部分 谢谢!