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 ...
随机推荐
- 洛谷 P4135 作诗
分块大暴力,跟区间众数基本一样 #pragma GCC optimize(3) #include<cstdio> #include<algorithm> #include< ...
- centOS 部署服务器(一)
接下来我所写的博客仅仅是为了记录我的学习过程,与其他无关. 由于公司换用了亚马逊服务器,用的是它的RDS数据库,所以就没有像以前的项目部署的时候使用mysql,不过要下载安装mysql-proxy,字 ...
- 转 Oracle中merge into的使用
http://www.cnblogs.com/highriver/archive/2011/08/02/2125043.html
- 启动azkaban时出现User xml file conf/azkaban-users.xml doesn't exist问题解决(图文详解)
问题详情 [hadoop@master azkaban]$ ll total drwxrwxr-x hadoop hadoop May : azkaban- drwxrwxr-x hadoop h ...
- Spark MLlib编程API入门系列之特征提取之主成分分析(PCA)
不多说,直接上干货! 主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法. 参考 http://blo ...
- Camera和 tris,verts的优化
Unity的Camera组件有很多可调节的参数,当需要做优化的时候,stats面板中的tris和verts这两个重点项都与Camera组件的参数有很大关系,有些参数的意义Unity手册说得不够详细,经 ...
- LINUX 文件夹打包
tar -zcvf /data/www.tar.gz data/www tar -zcvf 打包后生成的文件名全路径 要打包的目录 压缩: 压缩当前的文件夹 zip -r ./xahot.zip ./ ...
- 动手实现 React-redux(四):mapDispatchToProps
在重构 ThemeSwitch 的时候我们发现,ThemeSwitch 除了需要 store 里面的数据以外,还需要 store 来 dispatch: ... // dispatch action ...
- Asp.net MVC + Vue.js
@{ Layout = null; } <!DOCTYPE html><html> <head> <meta charset="UTF-8" ...
- 关于line-height的理解(如何实现psd稿件上下文字距离为10px)