无头模式下点击下拉菜单遇ElementClickInterceptedException问题求助
问题:无头模式下点击下拉菜单触发ElementClickInterceptedException异常
尝试点击下拉菜单时,仅在无头(headless)模式下遇到ElementClickInterceptedException异常。查看报错截图发现下拉菜单明明已被点击,但系统未识别该操作,情况反常。
当前启用无头模式的代码
Open Browser Window [Arguments] ${LANGUAGE_CODE} # NOTE: Chrome Options is needed for Jenkins to have the 1920 x 1080 size Open Browser ${LOGIN URL} ${BROWSER} options=add_argument("--lang\=${LANGUAGE_CODE}");add_argument("--headless");add_argument("--window-size=1920,1080"); Maximize Browser Window
点击下拉菜单的代码
${visible} Run Keyword And Return Status Element Should Be Visible ${ppp_cmbGrid} Run Keyword If ${visible} ... Click Element ${ppp_cmbGrid}
已尝试的解决方案
调整浏览器启动参数,添加--start-maximized和--disable-blink-features=AutomationControlled:
Open Browser Window [Arguments] ${LANGUAGE_CODE} # NOTE: Chrome Options is needed for Jenkins to have the 1920 x 1080 size Open Browser ${LOGIN URL} ${BROWSER} options=add_argument("--lang\=${LANGUAGE_CODE}");add_argument("--window-size=1920,1080");add_argument("--start-maximized");add_argument("--headless")
额外添加的参数:
add_argument('--disable-blink-features=AutomationControlled')
仍出现的报错信息
ElementClickInterceptedException: Message: element click intercepted: Element <div class="combobox custom" style="width: calc(100% - 1px); text-align: left;">...</div> is not clickable at point (951, 224). Other element would receive the click: <span class="dropdown-placeholder" style="height: 45px;">...</span> (Session info: headless chrome=114.0.5735.198) Stacktrace: Backtrace: GetHandleVerifier [0x00728893+48451] (No symbol) [0x006BB8A1] (No symbol) [0x005C5058] (No symbol) [0x005F4BA4] (No symbol) [0x005F36E8] (No symbol) [0x005F1EEB] (No symbol) [0x005F12FE] (No symbol) [0x005E9AAC] (No symbol) [0x0060A2BC] (No symbol) [0x005E9586] (No symbol) [0x0060A614] (No symbol) [0x0061C482] (No symbol) [0x0060A0B6] (No symbol) [0x005E7E08] (No symbol) [0x005E8F2D] GetHandleVerifier [0x00988E3A+2540266] GetHandleVerifier [0x009C8959+2801161] GetHandleVerifier [0x009C295C+2776588] GetHandleVerifier [0x007B2280+612144] (No symbol) [0x006C4F6C] (No symbol) [0x006C11D8] (No symbol) [0x006C12BB] (No symbol) [0x006B4857] BaseThreadInitThunk [0x75EA7D59+25] RtlInitializeExceptionChain [0x77CEB74B+107] RtlClearBits [0x77CEB6CF+191]
可行解决方案
1. 定位真正可点击的元素
报错明确显示,点击会被<span class="dropdown-placeholder">元素接收,说明你原定位的${ppp_cmbGrid}只是容器,实际触发下拉的是这个placeholder元素。直接修改定位器,定位该span后再点击:
${visible} Run Keyword And Return Status Element Should Be Visible ${ppp_cmbPlaceholder} # 替换为placeholder的定位表达式 Run Keyword If ${visible} ... Click Element ${ppp_cmbPlaceholder}
2. 用JavaScript强制点击
如果不想修改定位器,可通过JavaScript绕过元素遮挡检测,直接触发点击事件:
Run Keyword If ${visible} ... Execute JavaScript arguments[0].click(); ${ppp_cmbGrid}
3. 升级无头模式参数
Chrome 112+版本推出了更接近正常浏览器的新无头模式,替换旧的--headless为--headless=new,同时避免--window-size与--start-maximized混用(两者存在冲突):
Open Browser Window [Arguments] ${LANGUAGE_CODE} # NOTE: Chrome Options is needed for Jenkins to have the 1920 x 1080 size Open Browser ${LOGIN URL} ${BROWSER} options=add_argument("--lang\=${LANGUAGE_CODE}");add_argument("--headless=new");add_argument("--window-size=1920,1080");add_argument("--disable-blink-features=AutomationControlled")
4. 增加可点击等待
元素可见不代表已完全就绪可点击,添加等待步骤确保元素状态正常:
${visible} Run Keyword And Return Status Element Should Be Visible ${ppp_cmbGrid} Run Keyword If ${visible} ... Wait Until Element Is Clickable ${ppp_cmbGrid} timeout=10s ... Click Element ${ppp_cmbGrid}
内容的提问来源于stack exchange,提问作者Johna Grace
相关产品推荐
相关产品推荐

