selenium之chrome中alert无法捕获的可能原因

       当利用selenium模拟chrome浏览器时,对于弹窗alert的处理需要特别注意,由于在chorme中,一旦alert出现,则整个页面便会锁定在alert元素上,其他的元素都无法获取和操作,所以必须要先处理alert。

       对于alert无法捕获,首先最重要的自然是要注意是否已经交换了浏览器驱动driver的句柄(handle),由于这种弹窗出现的语境常常是打开新网页后在新网页出现的,所以必须先把driver的控制页面换到新的页面,才可以捕获新页面的元素,因此,这是最容易忽略也是最可能发生的情况。所以如果发现alert始终无法捕获,先check一下是否把驱动的控制权放置在了正确的句柄上。

       除此之外,由于脚本中经常会用到休眠,以等待网页加载,这时如果alert是在休眠期间就出现了,那么脚本在休眠结束后,可能无法再进入页面去间接捕获,这时可以直接用alert_is_present()或driver.switch_to_alert()语句捕获。如果结合WebDriverWait进行显式等待,那么可能尽管其中的条件语句是alert_is_present(),也无法进入页面捕获。所以这里要注意,如果遇到这种情况,则休眠不要过长,保证在alert出现之前就执行WebDriverWait显式等待语句,并且扫描频率要足够高,如果需要休眠一定的时间,便直接用alert_is_present()进行捕获;或者直接不要休眠,直接用WebDriverWait即可,当然也要足够高的扫描频率;如果还是不行,则利用异常捕获语句,捕获timeout异常,然后再在except语句中使用alert_is_present()语句捕获alert。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章