• 【Python测试开发】:切换窗口和表单


    一、多窗口切换

    浏览器打开的窗口其实会有一个叫做句柄的概念。
    句柄就类似于每一个标签页的ID一样,具有唯一性。

    1.1 语法

    • 获取当前窗口句柄,注意后面没有括号哦~
    driver.current_window_handle
    
    • 1
    • 获取所有窗口句柄,结果以列表格式存储,注意后面没有括号哦~
    driver.window_handles
    
    • 1
    • 根据句柄切换页面
    driver.switch_to.window(要切换窗口的句柄)
    
    • 1

    1.2 案例

      操作步骤:
    1、打开百度首页
    2、输入框输入“马蓉”
    3、点击回车
    4、点击“马蓉”百度百科
    4、在百度百科页面点击“编辑”
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from time import sleep
    
    # 打开浏览器
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)
    driver.maximize_window()
    
    # 打开网页
    driver.get('https://www.baidu.com/')
    # 定位搜索框
    search_box = driver.find_element(By.ID, 'kw')
    search_box.send_keys('马蓉')
    search_box.send_keys(Keys.ENTER)
    
    # 点击马蓉百度百科标题,进入详情页面(打开了一个新窗口)
    driver.find_element(By.XPATH, '//div[@id="content_left"]/div//h3/a').click()
    
    # 获取所有窗口句柄,结果保存在列表里
    handle_list = driver.window_handles
    # 打印出来看看结果
    print(handle_list)
    # 根据每个窗口的句柄唯一,来进行窗口切换
    driver.switch_to.window(handle_list[-1])
    
    # 在新窗口点击“编辑”链接
    driver.find_element(By.LINK_TEXT, '编辑').click()
    # 关闭浏览器
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    二、表单切换

    2.1 背景

    在同一个页面上,也可能存在元素不在同一个iframe标签里面的情况,因此要实现对元素的定位,需要先切换到元素所在的ifame标签,再根据八种元素定位方式进行元素定位。
    在这里插入图片描述

    2.2 语法

    • 切换到最外层iframe
    driver.switch_to.default_content()
    
    • 1
    • 切换到任意iframe
    1、定位到iframe标签
    2、driver.switch_to.frame()
    
    switch_to.frame()中可以写iframe标签的id和name属性的值,但是id和name属性的值要唯一
    switch_to.frame()中可以写通过其他元素定位方式定位的iframe标签对象,比如以下案例就是使用这种方式。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3 案例

      操作步骤:
    
    1、打开163邮箱登录页面
    2、定位账号和密码输入框,并输入账号和密码
    3、点击 登录 按钮
    4、点击页面上的“VIP”
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 如下图,可以知道账号和密码元素都有"ID"属性,但是,刷新页面可以知道ID属性为动态变化的,因此不可用于元素定位
    • 根据经验:ID属性值长长一串类似乱码的格式,都是不可以用于元素定位的,因此保险起见,都是采用其他元素定位方式
      在这里插入图片描述
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    
    # 打开浏览器
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(3)
    
    # 打开网页
    driver.get('https://mail.163.com/')
    
    # 切换表单
    # 定位表单元素
    iframe_element = driver.find_element(By.XPATH, '//div[@id="loginDiv"]/iframe')
    # 切换
    driver.switch_to.frame(iframe_element)
    
    # 账号输入框
    driver.find_element(By.NAME, 'email').send_keys('abc')
    # 密码输入框
    driver.find_element(By.NAME, 'password').send_keys('1122333')
    # 点击 登录 按钮
    driver.find_element(By.ID, 'dologin').click()
    
    # 切换到最外层ifame
    driver.switch_to.default_content()
    
    # 点击最外层表单的VIP字段
    driver.find_element(By.CSS_SELECTOR, 'a[href="https://vipmail.163.com/?from=fmail"]').click()
    sleep(3)
    # 关闭浏览器
    driver.quit()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    设计模式之建造者模式
    LLama的激活函数SwiGLU 解释
    git常用操作(二)
    快手根据ID取商品详情 API 返回值说明
    关于QGraphicsView通过eventFilter无法过滤鼠标事件
    golang学习笔记01——基本数据类型
    一道概率论趣题-直觉与数学原理是否吻合呢?
    个股期权、商品期权、股指期权开户攻略(全网最全)
    No.7软件需求规格说明书及UML
    如何使用javascript制作一个网页端3D贪吃蛇游戏(附源码及链接)
  • 原文地址:https://blog.csdn.net/Lucifer__hell/article/details/134514900