Как автоматизировать проверку CheckBox в раскрывающемся списке RadComboBox в IE с помощью vba - PullRequest
0 голосов
/ 05 апреля 2019

Я автоматизирую завершение некоторых параметров поиска на веб-странице, используя vba. Я могу перейти к выбору / щелчку обычных выпадающих списков и элементов внутри, но этот выпадающий список с флажками создает некоторую головную боль.

Итак, я получаю страницу, ожидаю загрузки и т. Д. Я могу щелкнуть раскрывающийся список и даже щелкнуть соответствующий раскрывающийся список, чтобы отобразить список. Однако, когда я хочу выбрать один из полей в этом конкретном списке, он останавливается.

Я много чего перепробовал, поэтому не могу все это упомянуть. Но у меня есть подозрение, что это легко, если вы знаете HTML, в котором я новичок.

К сожалению, я не могу предоставить ссылку на сайт, поскольку он является внутренним, но я могу предоставить некоторые html.

Итак, вот куда я попадаю, когда щелкаю раскрывающийся список и использую DOM Explorer, чтобы установить флажок: (да, я заменил <и> на |, чтобы получить HTML. Извините за это.)

| DIV ID = класс = стиль ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown "RadComboBoxDropDown RadComboBoxDropDown_Web20" = "WIDTH: 248px; FLOAT: левый; DISPLAY: блок; TOP: 0px; ВИДИМОСТЬ: видимый" jQuery1111035398745548310944 = "16" || DIV класс = "rcbScroll rcbWidth "style =" HEIGHT: 78px "jQuery1111035398745548310944 =" 9 "

| DIV class = rcbCheckAllItems jQuery1111035398745548310944 = "18" || LABEL || INPUT class = rcbCheckAllItemsCheckBox CHECKED type = checkbox value = "" | Проверить все | / LABEL || / DIV | 101 |

| UL class = rcbList style = "LIST-STYLE-TYPE: none; ZOOM: 1; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; НАСТРОЙКА: 0px; PADDING-RIGHT: 0px "jQuery1111035398745548310944 =" 14 "|

| LI class = rcbHovered_itemTypeName = "Telerik.Web.UI.RadComboBoxItem" || LABEL || INPUT class = rcbCheckBox CHECKED type = checkbox value = "" | Подробности ERP / Center | / LABEL || / LI |

| LI class = rcbItem_itemTypeName = "Telerik.Web.UI.RadComboBoxItem" || LABEL || INPUT class = rcbCheckBox CHECKED type = checkbox value = "" | Подкатегория и семейства | / LABEL || / LI || / UL || / DIV || / DIV |

Мой код (или соответствующие его части):

Dim ie As InternetExplorer
Set ie = New InternetExplorerMedium
Set Doc = CreateObject("htmlfile")
Set Doc = ie.document

Dim SelectByInput As Object
Set SelectByInput = Doc.getElementByID_
("ctl00_MainContentPlaceHolder_RadComboBoxChooseColumns_DropDown")
'This is OK. but miss part to get to the Checkbox.

Обратите внимание, что я пытался "Doc.getElementsByClassName (" rcbCheckAllItemsCheckBox "), но получаю ошибку времени выполнения 438, Object не поддерживает это свойство или метод.

Я ожидаю, что SelectByInput.Checked = True заключит сделку, если может просто перейти к элементу class = "rcbCheckAllItemsCheckBox" (метка "Check All") или к двум другим (с метками "ERP / Сведения о центре" и "Подкатегория и семейства".

Я должен обеспечить одно из двух решений, эквивалентных. 1) Верхний флажок установлен (ярлык «Отметить все») 2) Оба других флажка отмечены

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Альтернативный подход состоит в том, чтобы пройти через элементы управления вводом и попытаться проверить класс и другие свойства.Если он совпадает, установите флажок.

Код:

Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long

Sub demo()
    Dim i As Long
    Dim URL As String
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
    Dim HWNDSrc As Long

    Set IE = CreateObject("InternetExplorer.Application")

    IE.Visible = True

    URL = "C:\Users\Administrator\Desktop\91.html"

    IE.navigate URL

    Do While IE.readyState = 4: DoEvents: Loop
    Do Until IE.readyState = 4: DoEvents: Loop

    HWNDSrc = IE.HWND

    SetForegroundWindow HWNDSrc


   Set ElementCol = IE.document.getElementsByTagName("input")

    For Each btnInput In ElementCol

       ' Debug.Print btnInput.className
        If btnInput.className = "rcbCheckAllItemsCheckBox" Then
            btnInput.Checked = True
        End If
    Next btnInput

    'Set IE = Nothing
   ' Set objElement = Nothing
   ' Set objCollection = Nothing

End Sub

Вывод:

enter image description here

0 голосов
/ 05 апреля 2019

Попробуйте следующее

ie.document.querySelector(".rcbCheckAllItemsCheckBox").click 'N.B. if already checked will uncheck

или

ie.document.querySelector(".rcbCheckAllItemsCheckBox").checked = True
...