多窗口
获取当前窗口的句柄
driver.current_window_handle
获取所有窗口的句柄
driver.window_handles
对另一个窗口进行操作
driver.switch_to.window()
实例
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_enter():
driver = webdriver.Chrome()
# 打开网页
driver.get("https://www.baidu.com/")
# 最大化当前页
driver.maximize_window()
# 刷新当前页面
driver.refresh()
# 设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常
driver.implicitly_wait(10)
# 1、点击登录按钮
driver.find_element(By.XPATH, '//*[@id="s-top-loginbtn"]').click()
# 打印当前窗口
print(f"第一个窗口是{driver.current_window_handle}")
handles1 = driver.current_window_handle
# 2、点击立即注册
driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__regLink"]').click()
# 打印所有窗口
print(driver.window_handles)
handles = driver.window_handles
# 切换到新的窗口
driver.switch_to.window(handles[-1])
# 3、输入用户名密码完成注册
driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__userName"]').send_keys("xiaohan")
driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_4__phone"]').send_keys("13012312311")
time.sleep(5)
# 4、回到登录页面窗口,拿新的用户名登录
# 切换到第一个的窗口
driver.switch_to.window(handles[0])
driver.find_element(By.XPATH, '//*[@id="TANGRAM__PSP_11__userName"]').send_keys(13012312311)
time.sleep(5)
driver.quit()
frame处理
在web自动化中,如果一个元素定位不到,那么很大肯是在iframe中;
什么是frame?
frame是html中的框架,在html中,所谓的框架就是可以在同一个浏览器中显示不止一个页面;
基于html的框架,又分为垂直框架和水平框架(cols,rows);
frame分类
frame标签包含frameset、frame、iframe三种;
frameset和普通标签一样,不会影响正常的定位;
# 未嵌套的iframe
# 根据元素id或者index切换frame后,再进行操作
driver.switch_to_frame()
driver.switch_to_frame('id')
driver.switch_to_frame('索引值')
# 切换到默认frame
driver.switch_to.default_content()
# 处理嵌套的iframe(先进入父节点,再进到子节点,对子节点里面的对象进行处理和操作)
driver.switch_to_frame(‘父节点’)
driver.switch_to_frame(‘子节点’)
# 切换到父级frame
driver.switch_to.parent_frame()
文件上传
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_enter():
driver = webdriver.Chrome()
# 打开网页
driver.get("https://www.baidu.com/")
# 最大化当前页
driver.maximize_window()
# 刷新当前页面
driver.refresh()
# 设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常
driver.implicitly_wait(10)
# 1、点击图片
driver.find_element(By.XPATH, '//*[@id="form"]/span[1]/span[1]').click()
# 2、定位选择文件按钮,上传图片
driver.find_element(By.XPATH, '//*[@id="form"]/div/div[2]/div[2]/input').send_keys("C:/Users/韩寿帅/Desktop/gg.png")
time.sleep(5)
弹框处理机制
#获取当前页面上的警告框
driver.switch_to.alert
#获取文本
driver.switch_to.alert.text
#接受现有警告框
driver.switch_to.alert.accept()
# 解散现有警告框
driver.switch_to.alert.dismiss()
#发送文本至警告框
driver.switch_to.alert.send_keys("内容")