51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2967|回复: 6
打印 上一主题 下一主题

【版主分享】Selenium2(Webdriver)+Python处理浏览器弹窗

[复制链接]
  • TA的每日心情
    开心
    2024-7-10 10:58
  • 签到天数: 194 天

    连续签到: 1 天

    [LV.7]测试师长

    跳转到指定楼层
    1#
    发表于 2017-3-19 12:17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 Real_小T 于 2017-3-19 12:27 编辑

    我们在浏览网页时经常会碰到各种花样的弹窗,在做UI自动化测试的时候势必要处理这些弹窗,这里就介绍一下目前前端界两种弹窗的处理方法。
    1.alert弹窗

    这种弹窗是最简单的一种,Selenium里有自带的方法来处理它,用switch_to.alert先定位到弹窗,然后使用一系列方法来操作:
    • accept - 点击【确认】按钮
    • dismiss - 点击【取消】按钮(如有按钮)
    • send_keys - 输入内容(如有输入框)
    这里举一个菜鸟教程上的一个例子:http://www.runoob.com/try/try.php?filename=tryjs_alert,在页面左边点击【显示警告框】就会弹出一个alert弹窗:
    我们用以下代码就能实现切换至弹窗并点击【确定】按钮的效果:
    1. al = driver.switch_to_alert()
    2. al.accept()
    复制代码

    这里这个switch_to_alert()其实是旧写法,照理应该是用switch_to.alert(),但是新写法却会报错,目前猜测是版本问题,可能不支持新写法,这里就先用旧写法。
    以下是完整代码,为了运行的时候看得清楚,我加了两处等待:
    1. # encoding:utf-8

    2. from selenium import webdriver
    3. import time

    4. driver = webdriver.Firefox()
    5. driver.get("http://www.runoob.com/try/try.php?filename=tryjs_alert")
    6. driver.switch_to.frame("iframeResult")
    7. driver.find_element_by_xpath("html/body/input").click()
    8. time.sleep(1)
    9. al = driver.switch_to_alert()
    10. time.sleep(1)
    11. al.accept()
    复制代码

    2.自定义弹窗
    由于alert弹窗不美观,现在大多数网站都会使用自定义弹窗,使用Selenium自带的方法就驾驭不了了,此时就要搬出JS大法。这里举一个新世界教育官网首页的例子:

    大家能看到,图中的这种弹窗就是现在主流的表现形式,处理这种弹窗可以利用HTML DOM Style 对象,有一个display属性,可以设置元素如何被显示,详细解释可以参考http://www.w3school.com.cn/jsref/prop_style_display.asp。将display的值设置成none就可以去除这个弹窗了:
    1. js = 'document.getElementById("doyoo_monitor").style.display="none";'
    复制代码

    完整代码如下:
    1. # encoding:utf-8

    2. from selenium import webdriver
    3. import time

    4. driver = webdriver.Firefox()
    5. driver.get("http://sh.xsjedu.org/")
    6. time.sleep(1)
    7. js = 'document.getElementById("doyoo_monitor").style.display="none";'
    8. driver.execute_script(js)
    复制代码

    是不是既简单又高效~

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 赞一个!

    查看全部评分

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-11-26 18:46
  • 签到天数: 382 天

    连续签到: 1 天

    [LV.9]测试副司令

    2#
    发表于 2017-3-20 08:55:47 | 只看该作者
    太赞了,学习学习!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-5-10 09:16
  • 签到天数: 172 天

    连续签到: 2 天

    [LV.7]测试师长

    4#
    发表于 2017-3-20 09:52:57 | 只看该作者
    学习自定义弹窗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-3-6 10:11
  • 签到天数: 62 天

    连续签到: 1 天

    [LV.6]测试旅长

    6#
    发表于 2017-4-12 10:29:51 | 只看该作者
    赞一个,多多分享
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-26 17:40 , Processed in 0.073190 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表