您的位置:首页 > 编程语言 > Python开发

软件测试-python-selenium-多窗口切换

2020-02-12 20:19 162 查看

先粘贴代码,以百度为例

[code]def baidutest(url):
br = startBrowser.firefox()
br.maximize_window()
br.get(url)
br.implicitly_wait(10)
bd_home = br.current_window_handle
print(br.window_handles)
bd_register = 0
bd_forgot = 0
br.find_element_by_link_text('登录').click()
br.find_element_by_link_text('立即注册').click()
# bd_register = 0
# for i in br.window_handles:
#     if i != bd_home:
#         bd_register = i
while True:
# 判断窗口权柄是否更新,没有,则再等待0.1秒
if br.window_handles.__len__() == 2:
bd_register = br.window_handles[1]
break
else:
sleep(0.1)
continue
print(br.window_handles)
br.switch_to.window(bd_register)
br.find_element_by_id('TANGRAM__PSP_4__userName').send_keys('张三')
br.switch_to.window(bd_home)
br.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()
br.find_element_by_link_text('忘记密码?').click()
while True:
# 判断窗口权柄是否更新,没有,则再等待0.1秒
if br.window_handles.__len__() == 3:
bd_forgot = br.window_handles[1]
break
else:
sleep(0.1)
continue
print(br.window_handles)
br.switch_to.window(bd_forgot)
print(br.title)
br.switch_to.window(bd_home)
br.find_element_by_id('TANGRAM__PSP_4__closeBtn').click()
sleep(5)
br.quit()

多窗口切换网上大致有两种方法

1、for循环遍历window_handles,通过判断不是已有窗口的权柄,则是新打开窗口的权柄

[code]bd_register = 0
for i in br.window_handles:
if i != bd_home:
bd_register = i
br.switch_to.window(bd_register)

2、直接通过window_handles[1]获取最新窗口的权柄值,值得注意的是,无论打开多少个窗口,最新打开的窗口的权柄值都存储在window_handles[1]中,而window_handles[0]永远是最开始打开的窗口的权柄值。

[code]bd_forgot = br.window_handles[1]

但有时打开新窗口后,window_handles还来不及更新,这时获取的权柄值是不正确的,如果是打开第二个窗口,没更新的window_handles里面只有一个值,这时window_handles[1]会报错,因此在使用前需要对window_handles的长度进行判断,若window_handles的长度与打开的窗口个数一致才进行下一步操作,若是不一致,则再等待一小段时间(这里是0.1秒)

[code]    bd_forgot = 0
while True:
# 判断窗口权柄是否更新,没有,则再等待0.1秒
if br.window_handles.__len__() == 3:
bd_forgot = br.window_handles[1]
break
else:
sleep(0.1)
continue
br.switch_to.window(bd_forgot)

当然,以上代码可以直接用一个sleep代替,但sleep比较笨重,也会降低脚本的运行速度,因此不推荐使用

  • 点赞
  • 收藏
  • 分享
  • 文章举报
落雨沁尘 发布了4 篇原创文章 · 获赞 0 · 访问量 51 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: