测试必须在时间、质量和成本之间获取一个平衡点,这是测试策略和测试设计的价值体现。

2.7 多窗口、句柄(handle)

上一篇 / 下一篇  2018-06-12 10:45:43 / 个人分类:Python+Selenium2 WebDriver API

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#kF0

0xPVp{3z'B+T9n02.我们用代码去执行点击的时候,发现界面上出现两个窗口,如下图这种情况就是多窗口了。

y E |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软件测试网AE Xs(qh

.GHrR/Kp0    3.获取当前页面的句柄:driver.current_window_handle

t4a4O T%mBZL0A?i051Testing软件测试网^!B3[3h+Qv'Sg

6n0EY}(VMw6hQAlL0

.m1HLMN'b0三、获取所有句柄
Z0kmG$]O7M0    1.定位赶集网招聘求职按钮,并点击
F wJmNi0    2.点击后,获取当前所有的句柄:window_handles51Testing软件测试网0F*zACh Rf1v+?

*w [#~4A,H]ktb6?0
51Testing软件测试网hR*zB4@z"o
四、切换句柄

k?4o8im N7\0网上大部分教程都是些的第一种方法,小编这里新增一个更简单的方法,直接从获取所有的句柄list里面取值。51Testing软件测试网Jkhe0d

51Testing软件测试网e)Y3Fi6rT

方法一(不推荐):

i\ |0\d O?0

EQ!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-`0

U|Q2^P} t0    1.直接获取all_h这个list数据里面第二个hand的值:all_h[1]

+A{{k+EuR"e/g"h051Testing软件测试网z8_*wWX:g:nk

51Testing软件测试网.[(z |mF R1z6M5[!rv

$[ }P.Er0五、关闭新窗口,切回主页
{ ks|.T?#ghb R8W0   1.close是关闭当前窗口,因为此时有两个窗口,用close可以关闭其中一个,quit是退出整个进程(如果当前有两个窗口,会一起关闭)。
WKt gQ"Cmx0   2.切换到首页句柄:h51Testing软件测试网0Vp-uBq
   3.打印当前页面的title,看是否切换到首页了

,t"jW*[3z5@0

C^6OCcj2d051Testing软件测试网2rU:`-o oF

Lh.}$gi s051Testing软件测试网9z7a I8io z9[

&Al8[Fe+v%Kphj;U051Testing软件测试网$uA/B Fy7ERA[

六、参考代码51Testing软件测试网YO(uA'F

# -*- coding: utf-8 -*-
0um#E9u!V,z-gc0
51Testing软件测试网-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]*eP1W fQ9f
driver.find_element_by_link_text("招聘求职").click()
5am:pYg'^#qi0all_h = driver.window_handles51Testing软件测试网QaG eC&fz)c9M
printall_h# 打印所有的句柄51Testing软件测试网u J^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(V8E0
driver.switch_to.window(all_h[1])
} c&X,k#T/s s0printdriver.title51Testing软件测试网 p,z s%_C6`2I
# 关闭新窗口51Testing软件测试网b{Jk }R/x c
driver.close()51Testing软件测试网^3~2d.YH2e
# 切换到首页句柄51Testing软件测试网M,{wS^!e"T `
driver.switch_to.window(h)
9B OX r%Ob X0# 打印当前的title
}Y GWz0O0
printdriver.title

!V!x]#ma%k q0

TAG:

 

评分:0

我来说两句

Open Toolbar