web自动化测试第8步:浏览器不同页签之间的切换(handle)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/CCGGAAG/article/details/76177264

我们之前在《web自动化测试第3步:元素的基础操作和浏览器基础操作》这一节里最后预留了一个悬念,就是我们通过点击打开了一个新的页面,这时浏览器同时打开了两个页面,我们用close()方法关闭,却是关闭的初始页面,这时我们如果在新打开的页面来查找元素定位,也一定是定位不到的,所以我们要用到切换浏览器页签:也就是切换句柄handle切换的方法。

一、切换页签(句柄handle)的基础用法:

备注:部分方法为老写法,官方已经不推荐使用;点击这篇文章查看切换handle新写法。

1.获取浏览器当前所在页签的句柄:

  • current_window_handle()

2.获取所有页面窗口的句柄

  • window_handles()

3.将定位的页面转到指定的window_name页面

  • switch_to_window(window_name):
  • window_name:指定页面窗口的handle

 

二、关于webdriver源码展示


 
 
  1. @property
  2. def current_window_handle(self):
  3. """
  4. Returns the handle of the current window.
  5. :Usage:
  6. driver.current_window_handle
  7. """
  8. if self.w3c:
  9. return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)[ 'value']
  10. else:
  11. return self.execute(Command.GET_CURRENT_WINDOW_HANDLE)[ 'value']
  12. @property
  13. def window_handles(self):
  14. """
  15. Returns the handles of all windows within the current session.
  16. :Usage:
  17. driver.window_handles
  18. """
  19. if self.w3c:
  20. return self.execute(Command.W3C_GET_WINDOW_HANDLES)[ 'value']
  21. else:
  22. return self.execute(Command.GET_WINDOW_HANDLES)[ 'value']
  23. def switch_to_window(self, window_name):
  24. """ Deprecated use driver.switch_to.window
  25. """
  26. warnings.warn( "use driver.switch_to.window instead",
  27. DeprecationWarning, stacklevel= 2)
  28. self._switch_to.window(window_name)

三、实际场景切换窗口

我们依旧以第三节,百度贴吧的场景来实现,如何通过切换窗口来定位其他窗口页面的元素。我们可以通过页面title的变化来判断handle是否已经切换;然后我们关闭这个新打开的页签后,需要手动切换到第一个handle,才能在第一个页面操作。

切换handle

代码演示:


 
 
  1. from selenium import webdriver
  2. from time import sleep
  3. # sleep方法是为了初学者能够更好地了解操作的变化
  4. driver = webdriver.Chrome()
  5. # get() 进入贴吧页面
  6. driver.get( "https://tieba.baidu.com/")
  7. sleep( 1)
  8. # 点击title为娱乐明星的<a>标签元素
  9. driver.find_element_by_css_selector( "a[title = '娱乐明星']").click()
  10. sleep( 5)
  11. # 获取全部窗口的handle
  12. all = driver.window_handles
  13. print( "所有页签handle %s" % all)
  14. # 获取当前窗口的handle(贴吧首页)
  15. now_page = driver.current_window_handle
  16. print( "当前页面handle %s" % now_page)
  17. # 获取当前页面的title(当前title)
  18. title_first_page = driver.title
  19. print( "切换前title %s" % title_first_page)
  20. # 将页面handle转到娱乐明星页面
  21. driver.switch_to_window(all[ 1])
  22. # 获取当前页面的title(切换handle后)
  23. title_next_page = driver.title
  24. print( "切换后title %s" % title_next_page)
  25. # 关闭当前页签
  26. sleep( 2)
  27. driver.close()
  28. # 必须要切换回另一个页签窗口
  29. driver.switch_to_window(all[ 0])
  30. print( "切换回第一个页签:%s" % driver.title)

结果:


 
 
  1. 所有页签handle [ 'CDwindow-7FDD7BD3B5CCC6AB2F24D23BFAAEE3B3', 'CDwindow-BB6E2A7BB6B1A175947956E61DCF64BD']
  2. 当前页面handle CDwindow -7FDD7BD3B5CCC6AB2F24D23BFAAEE3B3
  3. 切换前title 百度贴吧——全球最大的中文社区
  4. 切换后title 娱乐明星_百度贴吧
  5. 切换回第一个页签:百度贴吧——全球最大的中文社区

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值