py+selenium 无法定位ShowModalDialog模态窗口【已解决】
问题:无法定位弹出的模态窗口。
前瞻:
模态窗口:关闭之前,无法操作其他窗口。
但是selenium无法定位到这类窗口,百度说是目前selenium不支持处理模态窗口。
目标:定位到窗口里面的元素,完成自动化测试。如图为目标窗口

没办法,一定要过的坎。
接下来开始骚操作一波~~
既然是同个点击某个链接触发的窗口,那么就有这个思路: 获取这个链接→用新窗口的方式打开这个链接,绕过直接点击这个链接。
业务:首先这个触发链接,是选择某条数据,点击查看手机号,故而弹出的模态窗口。

所以,我先获取该数据的id,再加入该窗口触发进入的url,当然也可以写死直接赋值url,这样数据如果被删除了,或是被新建覆盖了,那就不好了,不灵活。最好还是取变量值,因为我对数据操作是默认列表第一条数据,即使是这条数据删除了,也会默认列表第一条数据进行操作,所以不直接写死。
方法:
1、获取该条数据的ID,由于业务上可以点击客户姓名进入查看信息页面,进而拿到url的id值,即为该条数据的ID。


代码上,则是先进入查看信息页面,用driver.current_url获取当前url,然后再用urlparse进行url分解,取值。


由于py3没有urlparse, 声明这句即可 from urllib import parse ,然后调用parse里的parse_qs,如图。

2. 获取完url,用+合并,然后再用execute_script执行js操作,打开一个新窗口。
搞定!运行一下,这样就把原来的无法处理的模态窗口转化为普通的新窗口模式,继而通过切换窗口操作定位!!


总结:可能其他人出现模态窗口的位置、业务等与我的例子不一样,我的例子只是给个思路,获取该窗口地址重新打开一个窗口!
这样就可以绕过无法处理模态窗口的问题。
如有错误,请指正,谢谢!
py+selenium 无法定位ShowModalDialog模态窗口【已解决】的更多相关文章
- py+selenium 老是定位不到文本内容【已解决】
问题:定位不到文本内容,路径也正确,该加frame也有加,等待时间也够长 测试: 上图看不出差异,但是测试1就定位得到,测试2就定位不到,为什么? 看下图就知道了 区别就在于,测试2后面多了个空格!! ...
- py+selenium 明明定位不到元素,但却不报错或是报错AttributeError: 'list' object has no attribute 'click'【已解决】
问题:定位不到元素,但却不报错或者出现报错AttributeError: 'list' object has no attribute 'click' 如图 或者 解决方法: 将”driver ...
- py+selenium IE 定位到元素,但点击不了元素的问题【已解决】
目标:定位到[网点大客户清单],并点击该链接 问题:可以定位到元素id,但一直click不了 页面目标元素部分源码: 自动化源码: 进入frame后,可以定位到id,但点击不了 解决方法: 调用执 ...
- 模态窗口showModalDialog的浏览器兼容解决方案【改】
将代码中原来的 window.showModalDialog 全部替换成: showModalDialogN 然后增加方法: function showModalDialogN(uri, args, ...
- 模态窗口用webdriver定位不到,可用java+sikuli实现
一.安装sikuli(参见:http://lijunwei1228ok.blog.163.com/blog/static/97383797201311279595821/) 1.官网:http://w ...
- JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
一.Iframe 篇 公共部分 //父对象得到子窗口的值 //ObjectID是窗口标识,ContentID是元素ID function GetValue(ObjectID,ContentID) { ...
- 总结JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
一.Iframe 篇 //&&&&&&&&&&&&&&&&&&a ...
- robotframework+Selenium2Library 模态窗口的处理
原文链接:https://www.cnblogs.com/zuola/p/5750018.html 所谓模态窗口,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框. ...
- 总结js(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
http://hi.baidu.com/yashua839/blog/item/131fdb2fe547ef221f3089af.html一.Iframe 篇 //&&&&am ...
随机推荐
- android adb socket 通信
今天遇到一个问题:pc客户端和android的App通信,心跳通道(心跳包27个字节,是一个业务空包)在部分pc上总是会超时(5秒超时),nagle算法也给禁用了,pc端时按按量发送心跳的,怀疑来怀疑 ...
- 解决C++项目使用sqlite中文乱码问题
我参考的是这篇文章:https://www.2cto.com/database/201411/354891.html 理论是:sqlite使用的是UTF-8,C++中用的字符串是ascii或unico ...
- qt sql事务操作
事务是数据库的一个重要功能,所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位.在Qt中用transaction()开始一个事务操作,用commit()函数或 ...
- SPOJ130_Rent your airplane and make money_单调队列DP实现
题意比较简单,状态转移方程也比较容易得出: f[i]=max{ f [ j ] }+p[i],(j的结束时间在i开始时间之前) 若i开始之前没有结束的j,则f[i]=p[i]; 因数据量太大(n< ...
- python-监控服务
最近写了一个web测试程序,因为部署在其他地方,所以想弄个监控的进程去看服务是不是还在,要是不在好发邮件,就用python简单的写了一个. 想法是这样的,单独运行一个monitor的脚本,每隔一段时间 ...
- 【原创】ABAP根据文件路径获取文件所在目录
*&---------------------------------------------------------------------* *& Form frm_get_pat ...
- Nodejs操作MySQL - 增删改查
先安装npm模块项目 npm init 安装mysql npm install mysql --save Nodejs 连接msyql // 导入mysql const mysql = require ...
- 04 Javascript的运算符
js中的运算符跟python中的运算符有点类似,但也有不同.所谓运算,在数学上,是一种行为,通过已知量的可能的组合,获得新的量. 1.赋值运算符 以var x = 12,y=5来演示示例| 2.算数运 ...
- 我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅
标题:我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅 作者:Lamond Lu 大家好,我是陆楠,来自北京盛安德青岛分公司,今年非常有幸作为讲师参加了微软Insider ...
- 微信小程序商城(Java版)
体验 后台演示地址(账号:admin 密码:admin) 小程序体验如下: 技术选型 1 后端使用技术 1.1 springframework4.3.7.RELEASE 1.2 mybatis3.1. ...