Как проверить, что все выпадающие элементы в 'n' количестве полей со списком кликабельны?
У меня есть веб-страница, на которой в столбце есть "n" количество полей со списком. В котором я должен убедиться, что все выпадающие элементы в каждом и каждом комбинированных полях кликабельны в итерации с использованием роботизированной среды. У меня есть мой сценарий следующим образом:
*** Keywords ***
User should be able to select each and every role suggested in the combo boxes
@{combo_boxes}= Get WebElements css=div.col > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > combo-box:nth-child(1) > div:nth-child(1)
:FOR ${each} IN @{combo_boxes}
\ Click Element ${each}
\ Select drop down item
Select drop down item
@{drop_down_list}= Get WebElements css=div.col:nth-child(2) > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > combo-box:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div
:FOR ${each} IN @{drop_down_list}
\ Click Element ${each}
При выполнении вышеуказанного скрипта мы получаем следующую ошибку:
WebDriverException: Message: unknown error: Element <div _ngcontent-c6="" id="divCombo" style="height: 100%; background-color: transparent;">...</div> is not clickable at point (1014, 358). Other element would receive the click: <span _ngcontent-c6="" class="flexColumnFill dropdown-optionName">...</span>
(Session info: chrome=70.0.3538.77)
(Driver info: chromedriver=2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),platform=Windows NT 10.0.17134 x86_64)
3 ответа
Loop
@{combo_boxes}= Get WebElements css=.list > div > div:nth-child(1) > div:nth-child (3) > div:nth-child(1) > combo-box:nth-child(1) > div:nth-child(1)
${INTEGER} = Set Variable 2
Set Suite Variable ${INTEGER_A} ${INTEGER}
:FOR ${each} IN @{combo_boxes}
\ Click Element ${each}
\ ${roles_list}= Set Variable css=.list > div:nth-child(${INTEGER_A}) > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > combo-box:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div
\ Loop A ${roles_list} ${each}
\ ${INTEGER_A}= Evaluate ${INTEGER_A} + 1
\ Sleep 0.5s
\ Click Element ${each}
Loop A
[Arguments] ${roles_list} ${combo}
@{get_role_list}= Get WebElements ${roles_list}
:FOR ${each} IN @{get_role_list}
\ Click Element "${each}"
\ Run Keyword If '${each}'!='EXIT' Click Element ${combo}
Судя по скриншоту, ошибка возникает из-за того, что вы щелкаете по раскрывающемуся элементу в столбце, а не по отдельным элементам в нем, верно?
Если это так, то это потому, что элементы закрывают следующий выпадающий список - когда цикл заканчивается, selenium пытается щелкнуть следующий выпадающий список, но список элементов виден и находится над ним, "вставая на пути".
После завершения отдельных элементов, просто щелкните где-нибудь еще - в пустом месте, если есть страница, и список исчезнет, что позволит щелкнуть следующий элемент управления.
В приведенном ниже примере список блоков выбора выбирается и затем циклически повторяется для проверки пунктов меню. Конечно, на странице есть только одно поле, но логика работает, если их было больше.
*** Settings ***
Library SeleniumLibrary
Suite Teardown Close All Browsers
*** Test Cases ***
TC
Open Browser http://bootstrapformhelpers.com/select/ Chrome
Maximize Browser Window
Validate Dropdowns
*** Keywords ***
Validate Dropdowns
@{drop_downs}= Get WebElements xpath://div[@data-name="selectbox1"]
:FOR ${each} IN @{drop_downs}
\ Element Should Be Enabled ${each}
\ Click Element ${each}
\
\ ${name} Get Element Attribute ${each} data-name
\ Validate Dropdown Menu Items ${name}
Validate Dropdown Menu Items
[Arguments] ${dropdownname}
@{menu_items}= Get WebElements xpath://div[@data-name="${dropdownname}"]//a
:FOR ${each} IN @{menu_items}
\ Set Focus To Element ${each}
\ Sleep 0.2s # Only for demo purpose.
\ Element Should Be Visible ${each}
\ Element Should Be Enabled ${each}