element click intercepted
自動化測試記錄--element click intercepted
問題描述:我實現一個循環點擊和校驗彈出框內容信息是否正確的時候。代碼跑起來有時候pass有時候fail,fail的時候會報錯:
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted:?
Element <span role="presentation" id="button-1082-btnIconEl" class="x-btn-icon-el help_sys_icon" unselectable="on" style="">
...</span> is not clickable at point (1347, 68). Other element would receive the click: <div role="presentation" class="x-mask x-mask-fixed" style="top: 0px; left: 0px; z-index: 90001;" id="ext-gen4119"></div>
自我探索后對現象的解釋:
說是一個元素被點擊的時候被另一個元素打斷了,然后我發現是因為點擊這個元素的時候頁面是未加載完全的,有遮罩,所以這個元素無法被點擊。所以當直接使用diver.find_element().click()方法去點擊一個元素,這個時候如果這個dom元素已經存在就不會以未找到元素的形式來報錯,而是有可能會出現我遇到的這種情況(點擊的這個元素的上一個元素存在頁面加載時就會大概率出現)。
解決之路:
1.我先是在每一個點擊操作后面加time.sleep(3),后來還是不穩定拋出異常,然后我增加睡眠時間5,還是會拋出異常。這時候運行速度大大降低了,但是好像還是不穩定的拋出上面的異常。
2.中間我還沒理解那個報錯的原因,我一直以為是沒找到元素,所以弄了一個循環找,但是根據控制顯示元素是找到了,可是還是被打斷了,所以我就理解了dom里面能找到元素,不等同頁面上顯示出來了
3.最后解決問題的方法是:我使用了顯示等待。在嘗試用了好幾種顯示等待的方法后,如下,我用上了第三和四種實現了我的功能,第一種和第二種調用click方法沒有生效但是也沒有報錯,不知道什么原因。
- WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su'))) '''判斷某個元素是否被添加到了dom里并且可見,可見代表元素可顯示且寬和高都大于0'''
- WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click() '''判斷某個元素中是否可見并且是enable的,代表可點擊'''
- WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw'))) '''判斷元素是否可見,如果可見就返回這個元素'''
- WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav'))) '''判斷是否至少有一個元素在頁面中可見,如果定位到就返回列表'''
?
總結
以上是生活随笔為你收集整理的element click intercepted的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 显存(Video Memory)
- 下一篇: 百度笔试题——开发测试工程师(深圳)