selenium UnexpectedAlertPresentException报错

写了一个使用selenium操作IE自动填充表单的脚本。
数据填充到表单后,网页会有ajax请求到后台验证数据的有效性,如果有问题就会弹窗提示。

class UnexpectedAlertPresentException(WebDriverException):
    """
    Thrown when an unexpected alert is appeared.

    Usually raised when when an expected modal is blocking webdriver form executing any
    more commands.
    """

如果出现了modal弹窗,程序再执行其他命令就会报错。

但问题是因为ajax请求有网络延时,我并不知道什么时候会出现modal弹窗。
如果每填一个数据就等待足够长的时间,应该可以捕获到弹窗:

try:
    driver.find_element_by_id("xxx").send_keys('xxxx')
    time.sleep(long_time)    
except UnexpectedAlertPresentException as e:
    print str(e)

但是long_time设置太长会降低自动填表效率,太短有很有可能捕获不到因网络阻塞来的比较慢的弹窗。

请问有没有方法既有比较好的效率,又能捕获到弹窗的提示?

阅读 6.3k
1 个回答
新手上路,请多包涵

类似于
WebDriverWait(ff,60000).until(EC.visibility_of_element_located((By.XPATH,"//*[@id='dojox_grid_EnhancedGrid_0']")))
就可以了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题