java+selenium 跳过滑块完成页面跳转

发表于:2024-4-01 09:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:51CTO博客

  在做web自动化的时候,经常会遇到点击一个元素弹出了一个新的窗口,我们需要进入到新的窗口中,进行自动化操作,那么我们如何跳转到新的窗口上呢?
  切换新窗口
  在浏览器上遇到新的窗口打开的时候,因为脚本不知道我们想要跳转到那个窗口上,先获取全部窗口信息,然后进行选择窗口进行跳转,这里窗口是通过句柄的方法进行识别的。这里就用到了selenium中的3个方法,获取当前窗口句柄的方法,和获取全部窗窗口句柄的方法,以及跳转到窗口句柄的方法。
  获取当前窗口句柄
  通过方法:current_window_handle
  源码:
  @property
      def current_window_handle(self):
          """
          Returns the handle of the current window.
          :Usage:
              driver.current_window_handle
          """
          if self.w3c:
              return self.execute(Command.W3C_GET_CURRENT_WINDOW_HANDLE)['value']
          else:
              return self.execute(Command.GET_CURRENT_WINDOW_HANDLE)['value']
  获取全部窗口句柄
  通过方法:?window_handles
  执行完结果为列表显示内容,最后一个弹出框为最后一个。
  源码:
  @property
      def window_handles(self):
          """
          Returns the handles of all windows within the current session.
          :Usage:
              driver.window_handles
          """
          if self.w3c:
              return self.execute(Command.W3C_GET_WINDOW_HANDLES)['value']
          else:
              return self.execute(Command.GET_WINDOW_HANDLES)['value']
  跳转到对应的窗口
  如何查看窗口的句柄已经了解到了,如何跳转到对应的句柄上呢?我们可以通过方法?switch_to.window()
  switch_to_window()和前面说的iframe方法一样,官方不推荐使用,我们可以通过switch_to.window()方法来操作。
  源码:
  def switch_to_window(self, window_name):
          """ Deprecated use driver.switch_to.window
          """
          warnings.warn("use driver.switch_to.window instead",
                        DeprecationWarning, stacklevel=2)
          self._switch_to.window(window_name)
  通过上面的小案例发现,已经从百度跳转到了的窗口上。这里有点问题,如果当前已经有2个窗口了,我们通过下标1就不能跳转到最新的窗口上,我们可以通过下标-1的方法,每次都找最后一个,这里最好一个总是新的窗口。
  通过显示等待判断窗口是否出现
  我们可以通过显示等待的方法加上判断窗口是否出现的方法进行来减少我们的运行时间和避免运行错误。
  判断窗口出现方法前面有?new_window_is_opened()
  源码:
  class new_window_is_opened(object):
      """ An expectation that a new window will be opened and have the number of
      windows handles increase"""
      def __init__(self, current_handles):
          self.current_handles = current_handles
      def __call__(self, driver):
          return len(driver.window_handles) > len(self.current_handles)
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号