首页 > 技术文章 > Selenium3+python3自动化(三十四)--expected_conditions模块 判断弹出框存在(alert_is_present)

canglongdao 2020-09-03 11:40 原文

前言

系统弹窗这个是很常见的场景,有时候它不弹出来去操作的话,会抛出异常。那么又不知道它啥时候会出来,那么就需要去判断弹窗是否弹出了。

一、判断alert源码分析

class alert_is_present(object):
    """ Expect an alert to be present."""
    def __init__(self):
        pass

    def __call__(self, driver):
        try:
            alert = driver.switch_to.alert
            return alert
        except NoAlertPresentException:
            return False

 1.这个类比较简单,初始化里面无内容

2.__call__里面就是判断可以切换到alert,就返回alert这个对象,不可以切换就返回False

 二、实例操作

1.前面的操作步骤优化了下,为了提高脚本的稳定性,确保元素出现后操作。

这里结合了WebDriverWait里的方法

2.实现步骤如下,这里判断的结果返回有两种:没找到就返回False;找到就返回alert对象

3.先判断alert是否弹出,如果弹出就点确定按钮accept()

参考代码:

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Chrome()
driver.get("https://www.baidu.com")
#鼠标悬停在设置按钮上
s=WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("s-usersetting-top"))
ActionChains(driver).move_to_element(s).perform()
WebDriverWait(driver,5).until(lambda driver:driver.find_element_by_link_text("搜索设置")).click()
WebDriverWait(driver,5).until(lambda x:x.find_element("id","nr_3")).click()
driver.find_element_by_link_text("保存设置").click()
result=EC.alert_is_present()(driver)
if result:
    print(result.text)
    result.accept()
else:
    print("alert 未弹出")

 运行结果:

已经记录下您的使用偏好

   

推荐阅读