• web自动化测试第8步:不同窗口之间的切换(handle)


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

    1.切换窗口的方法

    current_window_handle:

    获取当前页面窗口的句柄

    window_handles:

    获取所有页面窗口的句柄

    switch_to_window(window_name):

    将定位的页面转到指定的window_name页面(window_name:指定页面窗口的handle)


    2.关于源码:

    @property
    def current_window_handle(self):
        """
        Returns the handle of the current window.
    
        :Usage:
            driver.current_window_handle
        """
        return self.execute(Command.GET_CURRENT_WINDOW_HANDLE)['value']
    
    @property
    def window_handles(self):
        """
        Returns the handles of all windows within the current session.
    
        :Usage:
            driver.window_handles
        """
        return self.execute(Command.GET_WINDOW_HANDLES)['value']
    def switch_to_window(self, window_name):
        """ Deprecated use driver.switch_to.window
        """
        warnings.warn("use driver.switch_to.window instead", DeprecationWarning)
        self._switch_to.window(window_name)


    3.实际场景切换窗口

    我们依旧以第三节,百度贴吧的场景来实现,如何通过切换窗口来定位其他窗口页面的元素。我们可以通过页面title的变化来判断handle是否已经切换

    from selenium import webdriver
    from time import sleep # sleep方法是为了初学者能够更好地了解操作的变化,所以休眠一定时间,可以去掉
    driver = webdriver.Chrome()
    
    # get() 进入贴吧页面
    driver.get("https://tieba.baidu.com/")
    sleep(1)
    
    # 点击title为娱乐明星的<a>标签元素
    driver.find_element_by_css_selector("a[title = '娱乐明星']").click()
    sleep(1)
    
    # 获取全部窗口的handle
    all = driver.window_handles
    print(all)
    
    # 获取当前窗口的handle(贴吧首页)
    now_page = driver.current_window_handle
    print(now_page)
    
    # 获取当前页面的title(当前title)
    title_first_page = driver.title
    print(title_first_page)
    
    # 将页面handle转到娱乐明星页面
    driver.switch_to_window(all[1])
    
    # 获取当前页面的title(切换handle后)
    title_next_page = driver.title
    print(title_next_page)




  • 相关阅读:
    闭包的应用(转载)
    智能社讲解js基础
    HTML5 Geolocation
    Redis主从配置
    Redis序列化配置
    Ribbon负载均衡原理学习记录
    2059 mysql
    Cache缓存
    rabbitmq(三)-Direct交换器
    rabbitmq(二)原理
  • 原文地址:https://www.cnblogs.com/CCGGAAG/p/7800329.html
Copyright © 2020-2023  润新知