Selenium弹出框的处理 switch_to.alert 三种类型

三种警告框:

    1、 alert(一个按钮)

    2、 confirm(两个:确认,取消)

    3、 prompt(两个按钮+输入框)

弹框的方法:switch_to.alert() 调用

    1、text    获取弹框文本,有则显示

    2、accept()    确认

    3、dimiss()    取消

    4、send_keys()    只能对prompt弹框输入字符,alert 和 confirm 会报错

示例代码如下:

# !/usr/bin/env python

from seleniumimport webdriver

from selenium.webdriverimport ActionChains

import time


dr = webdriver.Chrome()

dr.get("https://www.baidu.com")


# 鼠标悬停至“设置”链接

time.sleep(2)    #给页面一个加载缓冲的时间

link = dr.find_element_by_link_text("设置"t

ActionChains(dr).move_to_element(link).perform()


# 点击 “设置” 下隐藏的 “搜索设置”

dr.find_element_by_link_text("搜索设置").click()

time.sleep(1000 /1000)  #***最后【备注】重点说这个***

dr.find_element_by_link_text("保存设置").click()

# dr.find_element_by_lin("//td[.='设定您希望搜索结果显示的条数']").click()    #这句是为了验证一个东西


# 接受警告框

time.sleep(2)    可以不用给时间,这里给2秒是为了看到弹窗效果

dr.switch_to.alert.accept()

dr.quit()

【备注】:

问:为什么把 time.sleep(1000 /1000) 说是重点?

答:很多人这里缓冲渲染时间不够,会报错

具体测试流程:

dr.find_element_by_link_text("搜索设置").click() 

dr.find_element_by_link_text("保存设置").click()

这两句代码中间加入时间间隔,其它代码原封不动。time.sleep() 

第①组时间间隔为:1/1000,10/1000,50/1000,110/1000,115/1000。稳定报错: 【NoSuchElementException: Message: no such element: 】

②组时间间隔为:120/1000,130/1000,150/1000,180/1000,250/1000,300/1000。不定出现: 【NoAlertPresentException: Message: no such alert】、【NoSuchElementException: Message: no such element: 】、【弹窗成功】

③时间间隔为:大于400/1000,代码都能正常走完


我们分析一下第①组数据,无论你解释为“设置”下的悬浮框模块没消失,或者页面没渲染看似都说得通。但是别忽略一点NoSuchElementException源码:Element may not yet be on the screen at the time of the find operation, (webpage is still loading) , 译为:元素在查找操作时可能尚未出现在屏幕上。后面的我就不说了

再看第②组数据,其中有个异常NoAlertPresentException源码:This can be caused by calling an operation on the Alert() class when an alert is not yet on the screen.译为:这可能是由于在屏幕上尚未出现警告时调用Alert()类操作造成的。也就是说虽然这个时候“保存设置”的文字是渲染好了,但是它的alert功能尚未完全部署好

对此,可能不太好理解,那么我们就对这一行代码进行改造。

#dr.find_element_by_link_text("保存设置").click()     #将这行代码注释,替换为下面这句

dr.find_element_by_xpath("//td[.='设定您希望搜索结果显示的条数']").click()

这个时候再执行,稳定报错:【NoAlertPresentException: Message: no such alert】。

为什么?因为点击一个没有弹窗功能的元素,还去调用alert()方法才会报这个错。

至于time.sleep()的时间 最好根据自己的电脑配置,不要太小

你可能感兴趣的:(Selenium弹出框的处理 switch_to.alert 三种类型)