2.7 多窗口、句柄(handle)
:@S f:nzGv
rN0前言 51Testing软件测试网@Oy+Mp+d
有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。
$O ~6A
pe'T06[s
S$x^1]
XQx0一、认识多窗口51Testing软件测试网9e}L]4^d
1.打开赶集网:http://bj.ganji.com/,点击招聘求职按钮会发现右边多了一个窗口标签。51Testing软件测试网uc&R'O+?/Ou
4y@^/V,[$`9N02.我们用代码去执行点击的时候,发现界面上出现两个窗口,如下图这种情况就是多窗口了。
H2l k,eC2^03.到这里估计有小伙伴纳闷了,手工点击是2个标签,怎么脚本点击就变成2个窗口了,这个在2.1里面讲过,脚本执行是不加载配置的,手工点击是
浏览器默认设置了新窗口打开方式为标签,这里用鼠标按住点二个标签,拖拽出来,也就变成2个标签了,是一回事。
51Testing软件测试网g;^u^5r\*K}二、获取当前窗口句柄
]R^I-cq0,i,o)G8k8ObUD.G V0 1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。
FY0_,O~}-S4c0G4ksS+A;~0 2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。
e!|
oRN*H*m'L7cW;k051Testing软件测试网|ya-mq%p've:?I([ c 3.获取当前页面的句柄:driver.current_window_handle
6As3V#Se/[7wVmJ0'e3V Q(M(V
N0
8l
F*kv
k051Testing软件测试网u,d9g'?%R~V&Yz^三、获取所有句柄
O
ZD*R
a`7LZ0 1.定位赶集网招聘求职按钮,并点击
L+s0kS6t1SVNz0 2.点击后,获取当前所有的句柄:window_handles51Testing软件测试网-og3iP;B9M9b^
51Testing软件测试网;_%PI1k2LJ R rN(]L
VK+l5J#Q0
四、切换句柄
*E9c1B%v$uB0网上大部分教程都是些的第一种方法,小编这里新增一个更简单的方法,直接从获取所有的句柄list里面取值。
\3@2`jdU0&|p$O)`#e5?0方法一(不推荐):51Testing软件测试网bCl[+`/Ip[
'@@qT}0 1.循环判断是否与首页句柄相等
(t%p+E#M;d0\
e051Testing软件测试网P
[+YyTDYtu y0l 2.如果不等,说明是新页面的句柄51Testing软件测试网pIk*f"SF%b-v
|IPQNv/K0 3.获取的新页面句柄后,可以切换到新打开的页面上51Testing软件测试网!t}Q*`c
9pm(ej$JoE
w0 4.打印新页面的title,看是否切换成功
j0K0E(u9M3yI051Testing软件测试网C
dm
Y8c.Y)i方法二:
9l H8A6i1Q}W4dd051Testing软件测试网Y|0D"C*[uo i 1.直接获取all_h这个list数据里面第二个hand的值:all_h[1]51Testing软件测试网edt[u5e
a1@(n"n4m0q_:X051Testing软件测试网]EGyS-hh
51Testing软件测试网 q$YT*P4p"`4Lg五、关闭新窗口,切回主页51Testing软件测试网5C\:CF Z0t
1.close是关闭当前窗口,因为此时有两个窗口,用close可以关闭其中一个,quit是退出整个进程(如果当前有两个窗口,会一起关闭)。51Testing软件测试网h
o-j
s!`9Jt
2.切换到首页句柄:h
R5KuAcweT w0 3.打印当前页面的title,看是否切换到首页了
8pp!`x$w5CDo+bCq051Testing软件测试网f V x"N&y
VQ6?!M51Testing软件测试网 t-c h!Z&A1E5n
y7d7YsLJ/o6Wn0
xd(Tm,T0
y6t vu*\+odq~0r'pBz0LL"WS0六、参考代码51Testing软件测试网Us gDfv3h#K2K
# -*- coding: utf-8 -*-
6k&Al:UQ`0
%@-m-P%e^3\{0fromseleniumimportwebdriver51Testing软件测试网U2|Y4M:V"b)J
1K0o&htG?*f^
w0driver = webdriver.Firefox()
D0P#`~W0driver.get("http://bj.ganji.com/")51Testing软件测试网
@:`*p0o/y
h = driver.current_window_handle
ks;C8^
@D\0printh# 打印首页句柄
(| h}p!Or\-w7u)sa!U t0driver.find_element_by_link_text("招聘求职").click()
3^!l*r!DR.xf Q0all_h = driver.window_handles51Testing软件测试网#M+m2\Y'?S
printall_h# 打印所有的句柄51Testing软件测试网/X3Z `RVk%G
P7Sd)iUjz0bD#d"?0# 方法一:判断句柄,不等于首页就切换(不推荐此方法,太繁琐)
2]?/r4m+B]:?th g0# for i in all_h:
MD$H f:sTS0# if i != h:51Testing软件测试网K0Ntn,x"B+G}H
# driver.switch_to.window(i)
;m.z_dP5u1@nm)~t'H0# print driver.title
.]Q#CrkU$du5l8[/Vx0# 方法二:获取list里面第二个直接切换51Testing软件测试网Ma%a Z,M5yU&t
driver.switch_to.window(all_h[1])51Testing软件测试网'C/U0y%Dc+a)W%H
printdriver.title
S'J
YJ:obn4[)z#p0# 关闭新窗口51Testing软件测试网T&T7q0`+{oH!TLm
driver.close()51Testing软件测试网me7Q(h?2L#s
# 切换到首页句柄51Testing软件测试网-i,kO&^sO
driver.switch_to.window(h)51Testing软件测试网W^$R]ql4d6|x
# 打印当前的title
5`
v+R {J[\^zm0printdriver.title
K)Q||kF"\1q0