2.29 练习题1:去掉页面动态窗
Rd,@8E9r0我们在浏览网页时经常会碰到各种花样的弹窗,在做UI自动化测试的时候势必要处理这些弹窗,这里就介绍一下目前前端界两种弹窗的处理方法。
8YiY"PO7t F(j{2z0一、alert弹窗 51Testing软件测试网*r
qHuI
xJ1u
Q1S6j Ih!V3v051Testing软件测试网3~V?:TK4[QN
9Q4SA/fwbE2c0 51Testing软件测试网kk(E(GEn@/r;c@
51Testing软件测试网ma5~v6A 51Testing软件测试网Up&t7m|
51Testing软件测试网lKO(C
]|这种弹窗是最简单的一种,Selenium里有自带的方法来处理它,用switch_to.alert先定位到弹窗,然后使用一系列方法来操作:51Testing软件测试网K5Ed{
` ~e?'`*z
accept - 点击【确认】按钮51Testing软件测试网H*l?`'H c#_y0T
t;GQar1Yd.} L0dismiss - 点击【取消】按钮(如有按钮)51Testing软件测试网)lu3]-mk
L)o0H
51Testing软件测试网zEg8s.eOF$hsend_keys - 输入内容(如有输入框)51Testing软件测试网D;k},Ct*G,{a @
*M0F5vp3Y[MD0这里举一个菜鸟教程上的一个例子:51Testing软件测试网P-F$q"jB"g3R!L6|
,~l9KU|$~Q@0http://www.runoob.com/try/try.php?filename=tryjs_alert,
k?2U&i-bf1V ~]Pu051Testing软件测试网~rk9p(I wVV+E!Mj9v在页面左边点击【显示警告框】就会弹出一个alert弹窗:51Testing软件测试网O B |*qx;Mf(J
51Testing软件测试网8ni7sm/Bms0f(o)j dn#B?
w051Testing软件测试网 M e2@/{7tGma*`G我们用以下代码就能实现切换至弹窗并点击【确定】按钮的效果:51Testing软件测试网;l%e[*K'@*V_
al = driver.switch_to_alert() al.accept()
$k7^;R(E
p4U
|0这里这个switch_to_alert()其实是旧写法,照理应该是用switch_to.alert(),但是新写法却会报错,目前猜测是版本问题,可能不支持新写法,这里就先用旧写法。
~Z:L0uyxK
V;K051Testing软件测试网_D6i/c6d R以下是完整代码,为了运行的时候看得清楚,我加了两处等待:51Testing软件测试网OL)ZM:D%mkG
#encoding:utf-8 fromseleniumimportwebdriver importtime
driver=webdriver.Firefox()
driver.get("http://www.runoob.com/try/try.php?filename=tryjs_alert") 51Testing软件测试网$~li{4ZqDvDz2[
driver.switch_to.frame("iframeResult")51Testing软件测试网!EL
m$ZP3p2I{/v%or.`
driver.find_element_by_xpath("html/body/input").click()
time.sleep(1) al =driver.switch_to_alert()
time.sleep(1) al.accept()
!i `6KXdV#C*~1i
j0二、自定义弹窗
!`6d'Bot2f`0由于alert弹窗不美观,现在大多数网站都会使用自定义弹窗,使用Selenium自带的方法就驾驭不了了,此时就要搬出JS大法。这里举一个新世界教育官网首页的例子(http://sh.xsjedu.org): 51Testing软件测试网7L{ u AX
g8Zs'VE
51Testing软件测试网(vf4t2Wx#K1y51Testing软件测试网xI2F$Q)w M
k9{_
51Testing软件测试网A:a@!r9DkU t&}
8S
X@}2b0L051Testing软件测试网:\Q+f+{c_,O{大家能看到,图中的这种弹窗就是现在主流的表现形式,处理这种弹窗可以利用HTML DOM Style. 对象,有一个display属性,可以设置元素如何被显示,51Testing软件测试网/^3n+o|t7o
详细解释可以参考http://www.w3school.com.cn/jsref/prop_style_display.asp。将display的值设置成none就可以去除这个弹窗了:51Testing软件测试网&Dy~D:]'[N+I
js = 'document.getElementById("doyoo_monitor").style.display="none";'
0X q`Vl7@tI01]m5[3p u:xQ$\5S!C NU0完整代码如下:51Testing软件测试网E&P
Vwi3E2_x
#encoding:utf-8fromseleniumimportwebdriverimporttime
driver=webdriver.Firefox()
driver.get("http://sh.xsjedu.org/")
time.sleep(1)
js='document.getElementById("doyoo_monitor").style.display="none";'driver.execute_script(js)
51Testing软件测试网&M]/JcvJg\/cy是不是既简单又高效?51Testing软件测试网'L:ag.]v'F!]r