Не удается установить значение текстового поля веб-формы с помощью VB.Net из-за повторяющихся идентификаторов элементов - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь заполнить веб-форму с помощью VB.Net, и у меня возникла проблема с полем в веб-форме, поскольку одно и то же имя свойства "id" используется дважды подряд.

См. Ниже пример HTML.Первый - тот, который работает.Это поле «ClientAccountNumber».

Ниже это поле "ClientAccession", которое не работает.

Поле "ClientAccountNumber" (Одно, которое работает)

<td>

    <span class="zenLabel" id="zenlbl_22">Client Account Number</span>

    <div>

        <input class="text" id="ClientAccountNumber" type="text" size="30" value="TM123456P">

    </div>

</td>

ClientAccountNumber Field

Поле «ClientAccession» (не работает)

<td>

    <span class="QLSLabelReq" id="zenlbl_17">Client Accession</span>

    <div id="ClientAccession" value="TM123456P">

        <input class="text" id="ClientAccession" type="text" size="30">

    </div>

</td>

ClientAccession field

Как видите,Я могу установить «значение» поля «ClientAccountNumber» просто отлично.

Но у меня возникают проблемы при настройке «значения» поля «ClientAccession», потому что человек, который первоначально сделал HTML, использовал «id» «ClientAccession» два раза подряд.

Теперь он устанавливает «значение» первого «ClientAccession», и я не могу получить второй «ClientAccession», поэтому поле формы не заполняется в форме.

Это мой код, который я использую.

Sub AddDataToTomForm(AccessionNumber As String)

    Dim IE As Object 'Internet explorer object
    Dim objCollection As Object 'Variable used for cycling through different elements

    'Create IE Object
    IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate("http://SampleWebSite.com") 'Your website

    Do While IE.Busy
        Application.DoEvents() 'This allows the site to load first
    Loop

    IE.document.GetElementById("ClientAccountNumber").SetAttribute("value", AccessionNumber) 'The "CustomerInfo.AccountNumber" is the name of the element I looked for in this case.

    ' Clean up
    IE = Nothing

End Sub

Поле формы должно быть заполнено так, чтобы HTML-код должен был выглядеть следующим образом:

<td>

<span class="QLSLabelReq" id="zenlbl_17">Client Accession</span>
    <div id="ClientAccession">
        <input class="text" id="ClientAccession" type="text"  value="TM123456P" size="30">

</div>

</td>

1 Ответ

1 голос
/ 09 июля 2019

Вы можете использовать тип / тег с идентификатором, чтобы получить правильный. Это соответствует как тегу, так и атрибуту id. Аргумент querySelector применяется как к .Net, так и к vba.

ie.document.querySelector("input#ClientAccession").SetAttribute("value", someValue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...