三种警告框:
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()的时间 最好根据自己的电脑配置,不要太小