场景

页面上弹出的对话框是自动化测试经常会遇到的一个问题。很多情况下这个弹出的对话框是一个iframe,处理起来有点麻烦,需要进行switch_to操作. 请参考文章

测试曾哥:[Selenium]23.对话框的处理​zhuanlan.zhihu.com

但现在很多前端框架的对话框都是div形式的,这就让我们的处理变得十分简单了。

处理对话框一般会做下面的一些事情

  • 打开对话框
  • 关闭对话框
  • 操作对话框中的元素

代码

modal.html

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><title>modal</title>      <script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />     <script type="text/javascript">$(document).ready(function(){$('#click').click(function(){$(this).parent().find('p').text('try watir-webdriver right now!');});});</script></head><body><h3>modal</h3><div class="row-fluid"><div class="span6">     <!-- Button to trigger modal --><a href="#myModal" role="button" class="btn btn-primary" data-toggle="modal" id="show_modal">Click</a><!-- Modal --><div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3 id="myModalLabel">Modal header</h3></div><div class="modal-body"><p>watir-webdriver is better than slenium-webdriver</p><a href="#" id="click">click me</a></div><div class="modal-footer"><button class="btn" data-dismiss="modal" aria-hidden="true">Close</button><button class="btn btn-primary">Save changes</button></div></div></div>      </div>        </body><script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script></html>

modal.py

# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
import os
import selenium.webdriver.support.ui as ui
if 'HTTP_PROXY'in os.environ: del os.environ['HTTP_PROXY']dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('modal.html')dr.get(file_path)# 打开对话框
dr.find_element_by_id('show_modal').click()wait = ui.WebDriverWait(dr, 10)
wait.until(lambda dr: dr.find_element_by_id('myModal').is_displayed())# 点击对话框中的链接
# 由于对话框中的元素被蒙板所遮挡,直接点击会报 Element is not clickable的错误
# 所以使用js来模拟click
# 在watir-webdriver中只需要fire_event(:click)就可以了
link = dr.find_element_by_id('myModal').find_element_by_id('click')
dr.execute_script('$(arguments[0]).click()', link)
sleep(2)# 关闭对话框
buttons = dr.find_element_by_class_name('modal-footer').find_elements_by_tag_name('button')
buttons[0].click()dr.quit()

js关闭iframe窗口_[Selenium]24.处理弹窗新式的模态窗口相关推荐

  1. java关闭安全警告_如何禁用Java“安全警告”弹出窗口?

    将文本文档放在名为deployment.properties c:\ windows \ sun \ Java \ deployment \ deployment.properties的位置 尽管Ja ...

  2. vc 只有顶级窗口可以弹出窗口_如何在Mac上允许弹出窗口

    通常,我们尝试避免弹出窗口,但是有时您需要让它们通过.下面这样做的方法. 由于浏览器阻止了弹出窗口,您是否在macOS上遇到网站问题?幸运的是,您可以在计算机上的主要浏览器(例如Safari,Chro ...

  3. jq打开浏览器新窗口_使用jquery实现以post打开新窗口

    网络上已有此功能的函数,是以纯JS实现.但是在项目中发现,此函数无法兼容Firefox,由此我重写了此方法. //默认新窗口配置 var windowDefaultConfig = new Objec ...

  4. java获取窗口_如何使用Java获取当前打开的窗口/进程的列表?

    最后,使用Java 9+可以使用ProcessHandle:public static void main(String[] args) { ProcessHandle.allProcesses() ...

  5. JQuery Dialog(JS模态窗口,可拖拽的DIV)

    JQuery Dialog(JS模态窗口,可拖拽的DIV) 吴剑 2012-08-08 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 效果图 调用示意图 ...

  6. 关于模态窗口(showModalDialog)的专题【收藏】

    关于模态窗口(showModalDialog)的专题[收藏] 转自:http://www.cnblogs.com/donnet/articles/1039509.html 1.模态窗口的打开,mode ...

  7. 来个模态kuang_关于模态窗口(showModalDialog)的专题【收藏】

    转自:http://www.cnblogs.com/donnet/articles/1039509.html 1.模态窗口的打开,model window open 2.模态窗口的关闭,model w ...

  8. javascript模态窗口Demo

    不多介绍了,应该见很多了,见过很多网站用的是Jquery的插件,个人觉得不够灵活 下面这个Demo支持回调,可以直接引用modalDialog.js使用,不存在任何Jquery的影子 global.j ...

  9. bootstrap模态窗口

    模态窗口:模拟的窗口,本质上是<div>,通过设置z-index大小来实现的;             初始时,z-index初始参数是<0,所以不显示:         需要显示时 ...

最新文章

  1. GSM中时隙、信道、突发序列、帧的解释
  2. 7-2 jmu-Java-01入门-取数字 (2 分)
  3. 即时配送的ETA问题之亿级样本特征构造实践
  4. 容器化Go应用--基础镜像的未知时区问题
  5. 为什么真正的神经元学得更快
  6. L1-002. 打印沙漏-PAT团体程序设计天梯赛GPLT
  7. C++---之动态内存申请new
  8. [leetcode]Unique Paths
  9. atitit.研发管理--标准化流程总结---java开发环境与项目部署环境的搭建工具包总结
  10. 财务航天开票系统无法打印发票汇总明细,该系统打印发票正常,连其他打印机打印A4正常
  11. ISE14.7添加工程外部的IP核
  12. 怎样写好一篇高质量的技术文章?
  13. Phalcon 上传文件
  14. 给自己:得失心莫太重,功利心莫太强
  15. 记录四川移动盒子打开adb命令的方法 型号:UNT401H
  16. 虚拟化技术 - 概览 [一]
  17. java class的方法_Java Class类常用方法描述
  18. 类和对象(一)——类对象概念及定义
  19. 20种常用的运放典型电路
  20. 基于“云计算”技术的电子政务平台

热门文章

  1. hill密码源代码c语言,古典密码(Hill加密算法)(示例代码)
  2. 移动app测试的多样性_做移动APP功能测试,这些因素你得都考虑到~
  3. mysql memcached 使用场景_memcache 应用场景
  4. SELECT的学习以及在socket中的应用
  5. android list 替换元素_Python数据结构(一)List使用(大厂面试解答)
  6. mysql 导致iis 假死_php使用MySql函数导致Apache(iis)崩溃的问题解决方案
  7. mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...
  8. SQLlite数据导入到mySQL_如何批量导入数据到Sqlite数据库
  9. fastapi 传输文件存文件_python3 FastAPI框架入门 基本使用, 模版渲染, 数据交互,cookie使用, 上传文件, 静态文件配置...
  10. 【转】坐标系变换矩阵推导