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

2.7 多窗口、句柄(handle)

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

2.7 多窗口、句柄(handle)

:@Sf:nzGv rN0前言   51Testing软件测试网@Oy+Mp+d
有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

$O~6A pe'T0

6[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 ~}-S4c0

G4ksS+A;~0    2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长眼睛,它不知道你要操作哪个窗口,这时候只能句柄来判断了。

e!| oRN*H*m'L7cW;k051Testing软件测试网|ya-mq%p've:?I([ c

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

6As3V#Se/[7wVm J0

'e3VQ(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软件测试网;_%PI1k2LJRr N(]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 [+YyTDYtuy0l

    2.如果不等,说明是新页面的句柄51Testing软件测试网pIk*f"SF%b-v

|IPQ Nv/K0    3.获取的新页面句柄后,可以切换到新打开的页面上51Testing软件测试网!t} Q*`c

9pm(ej$J oE w0    4.打印新页面的title,看是否切换成功

j0K0E(u9M3yI051Testing软件测试网C dm Y8c.Y)i

方法二:

9lH8A6i1Q}W4dd051Testing软件测试网Y|0D"C*[uo i

    1.直接获取all_h这个list数据里面第二个hand的值:all_h[1]51Testing软件测试网 edt[u5e

a1@(n"n4m0q_:X051Testing软件测试网]EG yS-hh

51Testing软件测试网 q$Y T*P4p"`4Lg

五、关闭新窗口,切回主页51Testing软件测试网5C\:CF Z0t
   1.close是关闭当前窗口,因为此时有两个窗口,用close可以关闭其中一个,quit是退出整个进程(如果当前有两个窗口,会一起关闭)。51Testing软件测试网h o-j s!`9Jt
   2.切换到首页句柄:h
R5Ku AcweT w0   3.打印当前页面的title,看是否切换到首页了

8pp!`x$w5CDo+bCq051Testing软件测试网f Vx"N&y VQ6?!M

51Testing软件测试网 t-ch!Z&A1E5n

y7d7YsLJ/o6Wn0
xd(Tm,T0

y6t vu*\+odq~0

r'pBz0LL"WS0六、参考代码51Testing软件测试网Us gDf v3h#K2K

# -*- coding: utf-8 -*-
6k&Al:UQ`0

%@-m-P%e^3\{0
fromseleniumimportwebdriver51Testing软件测试网U2|Y4M:V"b)J

1K0o&ht G?*f^ w0driver = webdriver.Firefox()
D0P#` ~W0driver.get("http://bj.ganji.com/")51Testing软件测试网 @:`*p0o/y
h = driver.current_window_handle
k s;C8^ @D \0printh# 打印首页句柄
(|h}p!Or\-w7u)sa!U t0
driver.find_element_by_link_text("招聘求职").click()
3^!l*r!DR.xf Q0all_h = driver.window_handles51Testing软件测试网#M+m2\Y'?S
printall_h# 打印所有的句柄51Testing软件测试网/X3Z `R V k%G

P7S d)iUjz0bD#d"?0
# 方法一:判断句柄,不等于首页就切换(不推荐此方法,太繁琐)
2]?/r4m+B]:?thg0
# for i in all_h:
MD$H f:sT S0
# 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软件测试网M a%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[\^zm0
printdriver.title

K)Q||kF"\1q0

TAG:

 

评分:0

我来说两句

Open Toolbar