element click intercepted

自动化测试记录--element click intercepted

问题描述:我实现一个循环点击和校验弹出框内容信息是否正确的时候。代码跑起来有时候pass有时候fail,fail的时候会报错:

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: 
Element
...
is not clickable at point (1347, 68). Other element would receive the click:

自我探索后对现象的解释:

说是一个元素被点击的时候被另一个元素打断了,然后我发现是因为点击这个元素的时候页面是未加载完全的,有遮罩,所以这个元素无法被点击。所以当直接使用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')))
    '''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''

 

你可能感兴趣的:(selenium,测试类型)