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

2022-04-30  本文已影响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')
上一篇下一篇

猜你喜欢

热点阅读