2.7 多窗口、句柄(handle)
jG4`c3t+C ^8t0前言
%u/v
VGRz!U0有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。
;lk/HJ,`N6z/U051Testing软件测试网@m|!g0Nu一、认识多窗口
#f$Y-y/S
d+m'F3x\01.打开赶集网:http://bj.ganji.com/,点击招聘求职按钮会发现右边多了一个窗口标签。
{])B%v#kF00xPVp{3z'B+T9n02.我们用代码去执行点击的时候,发现界面上出现两个窗口,如下图这种情况就是多窗口了。
yE
|J.Z0FG5bH&r03.到这里估计有小伙伴纳闷了,手工点击是2个标签,怎么脚本点击就变成2个窗口了,这个在2.1里面讲过,脚本执行是不加载配置的,手工点击是
浏览器默认设置了新窗口打开方式为标签,这里用鼠标按住点二个标签,拖拽出来,也就变成2个标签了,是一回事。
:d_QjX;b0二、获取当前窗口句柄
1VpC/c2DWO5S-b0(m~*q
^w1m!n"A0 1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。
1@
~hK;Oq0_9wy3u/_}EB/n:w0 2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。51Testing软件测试网AEXs(qh
.GHrR/Kp0 3.获取当前页面的句柄:driver.current_window_handle
t4a4OT%mBZL0A?i051Testing软件测试网^!B3[3h+Qv'Sg6n0EY}(VMw6hQAl L0.m1HLMN'b0三、获取所有句柄
Z0kmG$]O7M0 1.定位赶集网招聘求职按钮,并点击
FwJmN i0 2.点击后,获取当前所有的句柄:window_handles51Testing软件测试网0F*zACh Rf1v+?
*w
[#~4A,H]ktb6?051Testing软件测试网hR*zB4@z"o
四、切换句柄
k?4o8im N7\0网上大部分教程都是些的第一种方法,小编这里新增一个更简单的方法,直接从获取所有的句柄list里面取值。51Testing软件测试网Jkhe0d
51Testing软件测试网e)Y3Fi6rT方法一(不推荐):
i\
|0\dO?0EQ!F(QR/Y F%OF(FA0 1.循环判断是否与首页句柄相等51Testing软件测试网O?&M!i(m4q-Tr/h&X9u
51Testing软件测试网`Sy"E
z1a(N-r;[S 2.如果不等,说明是新页面的句柄51Testing软件测试网Ztfs`x @~/D
j;\"HG)H;z8rw'k0 3.获取的新页面句柄后,可以切换到新打开的页面上51Testing软件测试网"l"H;@?+N6?
C
51Testing软件测试网0Kxq5?qaH 4.打印新页面的title,看是否切换成功51Testing软件测试网?3n9~ MU)cZ
51Testing软件测试网)by
~ w6bP/ZA1N\方法二:
s;RH w;v~G-`0U|Q2^P} t0 1.直接获取all_h这个list数据里面第二个hand的值:all_h[1]
+A {{k+EuR"e/g"h051Testing软件测试网z8_*wWX:g:nk51Testing软件测试网.[(z |mF R1z6M5[!rv
$[}P.Er0五、关闭新窗口,切回主页
{ks|.T?#ghbR8W0 1.close是关闭当前窗口,因为此时有两个窗口,用close可以关闭其中一个,quit是退出整个进程(如果当前有两个窗口,会一起关闭)。
WKt gQ"Cmx0 2.切换到首页句柄:h51Testing软件测试网0Vp-uBq
3.打印当前页面的title,看是否切换到首页了
,t"jW*[3z5@0C^6OCcj2d051Testing软件测试网2rU:`-ooF
Lh.}$gis051Testing软件测试网9z7a I8io z9[
&Al8[Fe+v%K phj;U051Testing软件测试网$uA/BFy7ERA[六、参考代码51Testing软件测试网YO(uA'F
# -*- coding: utf-8 -*-
0um#E9u!V,z-gc051Testing软件测试网-z0z@5h XV%}
fromseleniumimportwebdriver
;Vs)m@XD051Testing软件测试网vA3z?y V.GVm
lPa
driver = webdriver.Firefox()
7m[`%D-n:T |_0driver.get("http://bj.ganji.com/")
t,s*xk|H#O$s6~!Iq0h = driver.current_window_handle
q0o
hB
M7?0printh# 打印首页句柄51Testing软件测试网:n9Z1]*eP1WfQ9f
driver.find_element_by_link_text("招聘求职").click()
5am:pYg'^#qi0all_h = driver.window_handles51Testing软件测试网QaGeC&fz)c9M
printall_h# 打印所有的句柄51Testing软件测试网uJ^o,]
51Testing软件测试网TA.rV9W
m,U:W0b
# 方法一:判断句柄,不等于首页就切换(不推荐此方法,太繁琐)51Testing软件测试网!lqP;ACA
# for i in all_h:
'@4f%Bs/uy/D+O?0# if i != h:
K2_q`9le/wvd*}-U0# driver.switch_to.window(i)
l*h$W-t1X@N L0# print driver.title
O6[Z;?0Dj&J'L4Dv)g0# 方法二:获取list里面第二个直接切换
gMc(V8E0driver.switch_to.window(all_h[1])
} c&X,k#T/s s0printdriver.title51Testing软件测试网 p,z s%_C6`2I
# 关闭新窗口51Testing软件测试网b{Jk}R/xc
driver.close()51Testing软件测试网^3~2d.YH2e
# 切换到首页句柄51Testing软件测试网M,{wS^!e"T
`
driver.switch_to.window(h)
9B
OX
r%ObX0# 打印当前的title
}YGWz0O0printdriver.title
!V!x]#ma%kq0