美文网首页
Selenium中如何处理多窗口切换的问题

Selenium中如何处理多窗口切换的问题

作者: 吱吱菌啦啦 | 来源:发表于2022-04-30 14:44 被阅读0次
    • 句柄:窗口的唯一标识,多窗口切换窗口时切换句柄就可以在多个页面之间灵活操作了。

    多窗口处理流程:
    1.先获取当前窗口的句柄driver.current_window_handle
    2.再获取所有的的窗口句柄driver.window_handle
    3.判断是否是想要操作的窗口,如果是就可以对窗口进行操作,如果不是,跳转到另外一个窗口,对另一个窗口进行操作driver.switch_to_window

    eg:打开百度登录页面,点击注册,在注册页输入用户名密码,然后返回之前的登录页,输入用户名密码

    from time import sleep
    from selenium import webdriver
    from selenium.webdriver import TouchActions
    from selenium.webdriver.common.by import By
    
    class TestWindows():
        def setup(self):
            self.driver = webdriver.Chrome()
            # 隐式等待
            self.driver.implicitly_wait(5)
            # 窗口最大化
            self.driver.maximize_window()
            self.driver.get('http://www.baidu.com')
            # print(self.driver.current_window_handle)
    
        def teardown(self):
            self.driver.quit()
    
        def test_window(self):
            """
            打开百度登录页面,点击注册,在注册页输入用户名密码,返回之前的登录页,输入用户名密码
            :return:
            """
            # 点击登录按钮,打开登录页面
            self.driver.find_element(By.XPATH, '//*[@id="s-top-loginbtn"]').click()
            # 登录页面打印当前窗口
            print(self.driver.current_window_handle)
            # 点击立即注册,此时该页面窗口已经发生了跳转
            self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__regLink"]').click()
            # 立即注册页面,打印当前窗口--会发现窗口发生了变化,但是当前窗口还是和登录页面一致,说明这里需要切换窗口
            print(self.driver.current_window_handle)
            # 立即注册页面,打印所有窗口--会发现有两个窗口,所以我们下面的操作需要切换窗口
            print(self.driver.window_handles)
            windows = self.driver.window_handles
            # 切换窗口,切到最后一个窗口
            self.driver.switch_to.window(windows[-1])
            # 切换后再打印下当前窗口
            print(self.driver.current_window_handle)
            # 输入用户名手机号
            self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__userName"]').send_keys('zizi')
            self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__phone"]').send_keys('18712121212')
            sleep(2)
            # 切回窗口
            self.driver.switch_to.window(windows[0])
            sleep(2)
            # 打印当前窗口--会发现切回成功,和之前登录页窗口一直
            print(self.driver.current_window_handle)
            # 切换到登录页,输入用户名密码登录
            self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__userName"]').send_keys('zizi')
            self.driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__password"]').send_keys('password')
    

    相关文章

      网友评论

          本文标题:Selenium中如何处理多窗口切换的问题

          本文链接:https://www.haomeiwen.com/subject/kpmdyrtx.html