具有ID属性的元素不存在

时间:2019-07-17 11:44:31

标签: excel vba selenium iframe webdriver

在selenium excel vba中,我试图了解有关如何处理CSS选择器的更多信息 我想知道,因为在检查具有ID的元素并运行代码时,我收到一条消息,提示找不到该元素 这是到目前为止的代码

Private bot As New selenium.ChromeDriver

Sub Test()
Dim win, mainWin As selenium.Window, sCode As String, i As Long
Dim urlImage As String, urlPost As String

Dim sCase As String
sCase = "192160470"

Set bot = New ChromeDriver

With bot
    .Start "Chrome"

    'First Window (Main Window)
    .Get "https://www.kuwaitcourts.gov.kw/searchPages/searchCases.jsp"
    '.FindElementById("txtCaseNo").SendKeys sCase
    .FindElementByCss("input[type=text][name='txtCaseNo']").SendKeys sCase

    'MsgBox "Click OK After Entering Captcha", 64


    Stop
    .Quit
End With

End Sub

这是该元素的HTML部分

<td><input type="text" name="txtCaseNo" id="txtCaseNo" maxlength="9" class="inputTextBox" onkeypress="return onlyNumbers(event);"></td>

我被困在这一行

.FindElementByCss("input[type=text][name='txtCaseNo']").SendKeys sCase

感谢进阶的帮助或想法

2 个答案:

答案 0 :(得分:1)

该元素位于ID为 searchCaseDiv iframe内部。您必须切换到该iframe才能访问该元素。

使用.SwitchToFrame切换帧。

对于Java,就像这样

driver.switchTo().frame("searchCaseDiv");

答案 1 :(得分:1)

要将字符序列发送到用户名字段,因为所需元素位于<iframe>中,因此您必须:

  • 诱导 WebDriverWait 以使所需的框架可用并切换到它。
  • 诱导 WebDriverWait 以使所需的元素可点击
  • 您可以使用以下解决方案:

    With bot
        .Start "Chrome"
        .Get "https://www.kuwaitcourts.gov.kw/searchPages/searchCases.jsp"
        .SwitchToFrame "searchCaseDiv"
        .FindElementByCss("input[type=text][name='txtCaseNo']").SendKeys sCase
    
  

在这里您可以找到有关Ways to deal with #document under iframe的相关讨论