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')