背景:登录平安知鸟,点击“学员登录”链接,以新窗口打开知鸟平台登录页面并进行登录。
问题:结果出现无法正常打开新窗口,故以此篇记录问题解决思路
需要以新窗口打开如下页面:
问题解决方法:
当涉及到切换窗口时,需要用到句柄,因为当前窗口的句柄和新增窗口句柄不一样,当页面进入新窗口,句柄也需相应切换。
首先:打开url后需要获取当前主页面句柄,
hand_main = driver.current_window_handle
print("主页面句柄:hand_main =" + hand_main)
然后:进入新窗口的操作后,需要获取所有窗口句柄。
# 点击链接后,获取所有窗口句柄
windows = driver.window_handles
最后:切换句柄
-------------切换句柄的两种方式-------------------
# 【切换窗口方法1】:通过句柄数组下标切换窗口
print("总窗口数:" + str(len(windows)))
print("点击链接后所有窗口句柄的数组:" + str(windows))
driver.switch_to.window(windows[1])
print("切换至数组下标为[1]的句柄窗口成功!")
# 【切换窗口方法2】:循环页面句柄,获取非主页的句柄,只适用于2个页面窗口的情况
# for handle in windows:
# if handle != hand_main:
# driver.switch_to.window(handle)
# print("切换句柄成功")
-------------切换句柄的两种方式-------------------
如下为web自动化测试用例脚本: 以unittest框架实现该测试用例
import unittest
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
class TestLogin(unittest.TestCase):
def test_01_zhiniao_login(self):
num = "******"
pwd = "******"
driver = webdriver.Chrome()
driver.implicitly_wait(5)
url = "https://www.zhi-niao.com/"
driver.maximize_window()
driver.get(url)
# 获取主页面句柄
hand_main = driver.current_window_handle
print("主页面句柄:hand_main =" + hand_main)
# 相对路径+文本定位元素
href = driver.find_element(By.XPATH, "//span[text()='学员登录']").get_attribute("href")
driver.find_element(By.XPATH, "//span[text()='学员登录']").click()
# 点击链接后,获取所有窗口句柄
windows = driver.window_handles
'''-------------切换句柄的两种方式-------------------'''
# 【切换窗口方法1】:通过句柄数组下标切换窗口
print("总窗口数:" + str(len(windows)))
print("点击链接后所有窗口句柄的数组:" + str(windows))
driver.switch_to.window(windows[1])
print("切换至数组下标为[1]的句柄窗口成功!")
# 【切换窗口方法2】:循环页面句柄,获取非主页的句柄,只适用于2个页面窗口的情况
# for handle in windows:
# if handle != hand_main:
# driver.switch_to.window(handle)
# print("切换句柄成功")
'''-------------切换句柄的两种方式-------------------'''
driver.find_element(By.XPATH, "//input[@placeholder='请输入手机号']").send_keys(num)
driver.find_element(By.XPATH, "//input[@placeholder='请输入密码']").send_keys(pwd)
driver.find_element(By.XPATH,
"//span[@class='MuiButtonBase-root MuiIconButton-root jss247 MuiCheckbox-root MuiCheckbox-colorPrimary MuiIconButton-colorPrimary']").click()
driver.find_element(By.XPATH, "//span[text()='登 录']").click()
sleep(3)
driver.find_element(By.XPATH, "//div[@class='geetest_slider_button']").click()
# 进入新页面,查看当前页面句柄
hand_two = driver.current_window_handle
print("新页面句柄:hand_two = " + hand_two + "\n" + "杨小二test")
运行: 该用例写在一个unittest定义的方法中,想运行该一个方法,可将鼠标定位到该方法中,右键运行即可
程序运行结果:
打印出2个不同的句柄