多窗口处理与网页frame、文件上传、弹框处理

多窗口

获取当前窗口的句柄
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("内容")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值