Python+selenium(多表单、多窗口切换)
多表单切换
案例:在Frame.html文件种定位搜狗搜索页面,进行搜索操作
Frame.html
<html>
<head>
<title>Frame_test</title>
</head> <body>
<div>
<iframe id="search" src="http://www.sogou.com" width="800" height="500">
</div>
</body> <html>
浏览器打开:

frame_test.py
from selenium import webdriver
from time import sleep driver=webdriver.Firefox()
file_path=r'E:\python_script\Webdriver\1.html'
driver.get(file_path) # 切换到iframe(id="if")
driver.switch_to.frame('search') driver.find_element_by_id("query").send_keys("python")
sleep(2)
driver.find_element_by_id("stb").click()
sleep(2)
driver.quit()
多表单切换,是通过switch_to.frame()方法将当前定位的主题切换为frame/iframe表单的内切页面中。
switch_to.frame()默认可以直接取表单的id或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位
# 先通过xpath定位到iframe
xf = driver.find_element_by_xpath('//*[@class="search"]') # 再将定位对象传给switch_to.frame()方法
driver.switch_to.frame(xf)
多窗口切换
案例:在百度学术首页,点击注册按钮,进入注册页面,然后返回学术搜索页面,输入关键词搜索
windows.py
from selenium import webdriver
from time import sleep driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://xueshu.baidu.com/") # 获得百度学术搜索窗口句柄
search_windows = driver.current_window_handle
sleep(2) driver.find_element_by_link_text('注册').click()
sleep(2) # 获得当前所有打开的窗口的句柄
all_handles = driver.window_handles # 进入注册窗口
for handle in all_handles:
if handle!=search_windows:
print('now is register window!')
sleep(2) # 回到学术搜索窗口
for handle in all_handles:
if handle == search_windows:
driver.switch_to.window(search_windows)
sleep(2)
print("now is search window!")
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(2) driver.quit()
webdriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。
在本案例中,涉及到的方法如下:
current_window_handle:获得当前窗口句柄
window_handles:返回所有窗口的句柄到当前会话
Python+selenium(多表单、多窗口切换)的更多相关文章
- Selenium 多表单(frame/iframe)切换
frame标签有frameset.frame.iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe需要切换进去才能定位到其中的元素 比如下面这个网 ...
- Python+Selenium学习笔记8 - 多表单&多窗口切换
1.多表单切换 下图为待测页面:内嵌百度首页 切换到百度首页进行操作 1 # coding = utf-8 2 3 from selenium import webdriver 4 import os ...
- Selenium:多表单(frame/iframe)切换(Switch模块)
frame标签有frameset.frame.iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe需要切换进去才能定位到其中的元素 比如下面这个网 ...
- ExtJs 4.2.1 点击按钮弹出表单的窗口
初学ExtJs,做项目的时候想做一个这样的效果:点击按钮弹出对话框,之前一直是使用EasyUi来做的, EasyUi里有Dialog,用起来很方便,但是现在转移到ExtJs上后,发现没有Dialog这 ...
- selenium多表单切换以及多窗口切换、警告窗处理
selenium表单切换 在做UI自动化,有时候要定位的元素属性在页面上明明是唯一的.却怎么也不执行对元素的操作动作,这时候多半是iframe表单在作怪. 切入表单:iddriver.switch_t ...
- selenium 多表单切换处理(iframe/frame)
在web应用中,前台网页的设计一般会用到iframe/frame表单嵌套页面的应用.简单的就是一个页面签嵌套多个HEML/JSP文件.selenium webdriver 只能在同一页面识别定位元素 ...
- web自动化测试-selenium多表单切换
一.概述 1.在web应用中会经常遇到frame/iframe表单嵌套页面的应用 2.WebDriver只能在一个页面上对元素进行识别与定位 3.对于frame/iframe表单内嵌的页面上元素无法识 ...
- selenium 多表单切换
frame/iframe表单嵌套页面的应用.WebDrivr只能在一个页面上对元素识别与定位,对于在frame/iframe表单内嵌页面上的元素无法直接定位.这时需要使用 switch_to.fram ...
- Python+Selenium练习篇之19-多窗口之间切换
本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元 ...
- 【Python】django表单与提交
参考:http://djangobook.py3k.cn/2.0/chapter07/ 本文的内容应属于django的表单模块,没有涉及到的后端request对象的处理方法可以单独深入学习表单. UR ...
随机推荐
- Codeforces Round #395 (Div. 2) A
Description Comrade Dujikov is busy choosing artists for Timofey's birthday and is recieving calls f ...
- JSP文件过大无法编译
JSP文件过大无法编译: The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding th ...
- c#学习系列之装箱拆箱
1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的 ...
- B. Code For 1 一个类似于线段树的东西
http://codeforces.com/contest/768/problem/B 我的做法是,观察到,只有是x % 2的情况下,才有可能出现0 其他的,都是1来的,所以开始的ans应该是R - ...
- Android Studio V4 V7 包冲突的问题
最近被包冲突的问题搞奔溃了,特别是V4,V7 V4和V7包冲突的解决方式就是!版本要一致!! 比如我的一个项目中应用本来是这样引用包的 compile 'com.android.support:sup ...
- Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机
#此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...
- laravel之伪造跨站请求保护CSRF实现机制
Laravel 提供了简单的方法使你的应用免受 跨站请求伪造 (CSRF) 的袭击.跨站请求伪造是一种恶意的攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令. Laravel 为每个活跃用户 ...
- win驱动安装记录
工具:devcon64.exe 安装/更新/删除等记录:c:\windows\inf\setupapi.dev.log
- 移动端超级好用的reset.css(只做参考哦具体以你们实际项目需求为准)
html { color: #333; /*规定主色调,依据业务场景(非必须)*/ background: #F6F6F6; /*规定主背景,依据业务场景(非必须)*/ overflow-y: aut ...
- uva1660 Cable TV Network
点连通度:最少删除几个点使图不连通 拆点就变成了最小割 注意编号.画图就知道u’连v,v’连u. 技巧:不需要枚举S,T.固定S,枚举T即可 这种输入很烦, scanf(" (%d,%d)& ...