如何基于字符串变量执行Selenium ExpectedConditions

时间:2017-06-29 14:05:58

标签: vb.net selenium

非常简短的故事,我正在尝试开发一个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之间没有交叉的狭窄部分 谢谢!

0 个答案:

没有答案