selenium之 辨识alert、window以及操作
来源:互联网 发布:网络时间校对器 编辑:程序博客网 时间:2024/05/22 14:47
很多人分辨不出什么是alert、什么是window,今天讨论下怎么辨识alert和window,以及页面元素如div伪装的对话框。
1.分辨
首先区别下alert、window和伪装对话框:
alert,浏览器弹出框,一般是用来确认某些操作、输入简单的text或用户名、密码等,根据浏览器的不同,弹出框的样式也不一样,不过都是很简单的一个小框。在firebug中是无法获取到该框的元素的,也就是说alert是不属于网页DOM树的。如下图所示:
window,浏览器窗口,点击一个链接之后可能会打开一个新的浏览器窗口,跟之前的窗口是平行关系(alert跟窗口是父子关系,或者叫从属关系,alert必须依托于某一个窗口),有自己的地址栏、最大化、最小化按钮等。这个很容易分辨。
div伪装对话框,是通过网页元素伪装成对话框,这种对话框一般比较花哨,内容比较多,而且跟浏览器一看就不是一套,在网页中用firebug能够获取到其的元素,如下图:
2.alert操作
针对alert,selenium提供了相应的类来进行处理。
selenium.webdriver.common.alert.Alert(driver)
先列出Alert的所有操作:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
示例代码:
示例1:switch_to.alert , accept() , text
测试链接http://sahitest.com/demo/alertTest.htm
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
结果
- 1
- 1
示例2:Alert(driver) , dismiss()
测试链接http://sahitest.com/demo/confirmTest.htm
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
结果
- 1
- 1
示例3:switch_to.alert , send_keys(keysToSend)
测试链接http://sahitest.com/demo/promptTest.htm
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
结果
- 1
- 2
- 1
- 2
authenticate(username,password)方法没有找到合适的示例网页,不在这里写示例代码,不过用法是和send_keys一样,不过是传入两个参数而已。并且这种框很少出现,便不做更多研究。
3.window操作
window类似于alert,不过与原window是平行的,所以只需要切换到新的window上便可以操作该window的元素。
driver.switch_to.window(window_handle)
而window是通过window句柄handle来定位的。而selenium提供了两个属性方法来查询window句柄:
driver.current_window_handle
driver.window_handles
用以上两个属性获取到当前窗口以及所有窗口的句柄,就可以切换到其他的window了。
示例代码:
测试链接http://sahitest.com/demo/index.htm
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
结果:
- 1
- 2
- 1
- 2
这里有一些注意事项:
- 只能通过window的name来切换窗口,但window的name不是你想象的窗口title之类的,而是一串字符串,如‘{976ae257-19be-4b32-a82e-4ba5063ed0a2}’,所以你用title、url之类的想切window是不可能的
- 关闭了新窗口之后,driver并不会自动跳转回原窗口,而是需要你switch回来,直接去定位窗口元素会报NoSuchElementException
3.div类对话框
div类对话框是普通的网页元素,通过正常的find_element就可以定位并进行操作。不在这里进行详述。注意设置一定的等待时间,以免还未加载出来便进行下一步操作,造成NoSuchElementException报错。
- selenium之 辨识alert、window以及操作
- selenium之 辨识alert、window以及操作
- selenium之获取alert
- selenium之操作ChromeDriver
- selenium之操作ChromeDriver
- selenium之操作ChromeDriver
- Python+Selenium练习篇之29-处理Alert弹窗
- Selenium 捕获Alert
- selenium(三)alert
- 【Selenium】12Alert
- selenium:4.selenium的操作cookie 以及调用jsd
- Selenium webdriver 之浏览器操作
- selenium之操作日期控件
- window之bom操作
- 修改window.alert方法
- js重写window.alert
- 12. Window alert() 方法
- Window alert() 方法
- Struts2+Spring4+Hibernate4整合系列--(五)后续思考
- Android获取当前时间与星期几
- UVA-1424-Salesmen(DP)
- android MSM 上DeviceTree简介
- [Mapbox GL]绘制GeoJSON数据点
- selenium之 辨识alert、window以及操作
- 扑克牌顺子
- mybatis二级缓存
- Maven国内镜像
- 【Unity】为什么导入2D图片背景不是透明的
- jQuery文档处理(二)--复制,替换,包裹
- Mybatis中多个集合的迭代处理
- TestNG——annotation
- BPM端到端流程解决方案分享