自动化测试——多窗口切换和切换frame

news2024/9/22 19:33:56

在这里插入图片描述


这里写目录标题

  • 一、多窗口切换
    • 1、base.py:公共代码
    • 2、切换句柄的方式1,通过for循环
    • 3、切换句柄的方式2,通过索引切换
    • 4、源代码
  • 二、frame窗口
    • 1、什么是frame?
    • 2、Frame 分类
    • 3、判断要定位的元素在不在frame中两种方式
      • 方式一:鼠标选中要定位的元素,底部如果能看到iframe的字样,说明在frame中
      • 方式二:鼠标选中要定位的元素,向上查是否存在iframe标签
    • 4、切换未嵌套的iframe
      • a、使用iframe中的id属性来切换frame
      • b、依据索引来切换frame
    • 5、切换嵌套的iframe

一、多窗口切换

获取当前的窗口句柄:driver.current_window_handles
所有的窗口句柄:driver.window_handles
切换窗口:driver.switch_to.window()

1、base.py:公共代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/2/23 11:18
# @Author  : 杜兰特
# @File    : base.py

import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

class Base:
    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)
        self.driver.maximize_window()

    def teardown(self):
        self.driver.quit()

继承Base仍然先执行setup_class
最后执行test_down()

2、切换句柄的方式1,通过for循环

for item in window_handles:
    if item != self.driver.current_window_handle:
        self.driver.switch_to.window(item)

3、切换句柄的方式2,通过索引切换

self.driver.switch_to.window(window_handles[-1])

4、源代码

import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from .base import Base

class TestSwitchWindow(Base):
    #继承Base仍然先执行setup_class
    #最后执行test_down()
    def test_switch_window(self):
        self.driver.get('http://www.baidu.com')
        self.driver.find_element(By.XPATH,'//a[text()="新闻"]').click()
        window_handles=self.driver.window_handles
		
		#切换到最新的窗口
        self.driver.switch_to.window(window_handles[-1])
        time.sleep(5)
		
		#按照坐标的形式,滑动到指定的位置
        ActionChains(self.driver).scroll_by_amount(0,3000).perform()
        time.sleep(3)
        
		#再切换到最新的窗口
        self.driver.switch_to.window(window_handles[0])
        time.sleep(3)
        
        #文本框中输入文字666
        self.driver.find_element(By.CSS_SELECTOR,'.s_ipt').send_keys('666')
        time.sleep(3)

二、frame窗口

在web自动化中,如果一个元素定位不到,那么很大可能是在iframe中。

1、什么是frame?

frame是html中的框架,在html中,所谓的框架就是可以在同一个浏览器中显示不止一个页面。
基于html的框架,又分为垂直框架和水平框架

2、Frame 分类

frame标签包含frameset、frame、iframe三种,
frameset和普通的标签一样,不会影响正常的定位,可以使用index、id、name、webelement任意种方式定位
frame。
而frame与iframe对selenium定位而言是一样的。selenium有一组方法对frame进行操作

frame存在两种:一种是嵌套的,一种是非嵌套的。

3、判断要定位的元素在不在frame中两种方式

方式一:鼠标选中要定位的元素,底部如果能看到iframe的字样,说明在frame中

在这里插入图片描述

方式二:鼠标选中要定位的元素,向上查是否存在iframe标签

在这里插入图片描述

4、切换未嵌套的iframe

driver.switch_to.frame(‘frame的id’):按照frame中的id属性切换frame
driver.switch_to_frame(‘frame-index’):frame无ID的时候依据索引来处理,
索引从0开始driver.switch_to_frame(0)

a、使用iframe中的id属性来切换frame

import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from .base import Base

class TestSwitchWindow(Base):
    #继承Base仍然先执行setup_class
    #最后执行test_down()
    
    def test_switch_frame(self):
        self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
        ele=self.driver.find_element(By.ID,'iframeResult')
        self.driver.switch_to.frame(ele)
        self.driver.find_element(By.XPATH,'//div[text()="请拖拽我!"]')
        self.driver.switch_to.parent_frame()
        self.driver.find_element(By.XPATH,'//button[contains(text(),"点击运行")]')
        time.sleep(3)

b、依据索引来切换frame

import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from .base import Base

class TestSwitchWindow(Base):
    #继承Base仍然先执行setup_class
    #最后执行test_down()
    
    def test_switch_frame1(self):
        self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
        self.driver.switch_to.frame(0)
        self.driver.find_element(By.XPATH,'//div[text()="请拖拽我!"]')
        self.driver.switch_to.parent_frame()
        self.driver.find_element(By.XPATH,'//button[contains(text(),"点击运行")]')
        time.sleep(3)

5、切换嵌套的iframe

对于嵌套的先进入到iframe的父节点,再进入子节点,然后可以对子节点里面的对象进行处理和操作
driver.switch_to.frame(‘父节点’)
driver.switch_to.frame(‘子节点’)

在一个iframe中,如果还嵌套了另一个iframe
进入:一个一个的进,先进第一层的iframe,一层一层的进
如果出呢:一层一层的出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】P1 Linux 基础命令(3月3日完成)

Linux 基础命令Linux 目录结构Linux 命令ls 展示命令cd 目录切换命令pwd 查看当前工作目录mkdir 创建新的文件夹其他补充知识前言 本节内容: Linux 基本命令 下节内容: Linux vi 编辑器。 链接: 正文 Linux 目录结构 在耳熟能详的 Windows …

openpnp - error - 吸嘴没下降到板子上, 就将元件松开

文章目录openpnp - error - 吸嘴没下降到板子上, 就将元件松开概述笔记ENDopenpnp - error - 吸嘴没下降到板子上, 就将元件松开 概述 以前用过国内一家openpnp厂家出的设备, 他们家的openpnp是自己改过的. 贴片流程已经走过一遍. 这次还是按照以前记录的笔记, 按照国内那家的…

认识JavaScript中的防抖函数

👨 作者简介:大家好,我是Taro,前端领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录前言一、防抖是什么?1. deounce-v1的基本…

营业执照注册资本是什么意思

一、营业执照注册资本是什么意思 营业执照上的注册资本是指合营企业在登记管理机构登记的资本总额,是合营各方已经缴纳的或合营者承诺一定要缴纳的出资额的总和。我国法律、法规规定,合营企业成立之前必须在合营企业合同、章程中明确企业的注册资本&…

计算机网络安全基础知识2:http超文本传输协议,请求request消息的get和post,响应response消息的格式,响应状态码

计算机网络安全基础知识: 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤…

三周爆赚千万 电竞选手在无聊猿游戏赢麻了

如何用3个星期赚到1千万?普通人做梦都不敢想的事,电竞职业选手Mongraal却用几把游戏轻易完成,赚钱地点是蓝筹NFT项目Bored Ape Yacht Club(BAYC无聊猿)出品的新游戏Dookey Dash。 这款游戏类似《神庙逃亡》&#xff0…

【python】python-socketio+firecamp使用踩坑指南

server.py: import eventlet import asyncioeventlet.monkey_patch()import socketio import eventlet.wsgisio socketio.Server(async_modeeventlet, cors_allowed_origins*) # 指明在evenlet模式下sio.event def connect(sid, environ):print(f"connect, sid{sid}, e…

个人网站如何集成QQ快捷登录功能?

目录 一、网站集成QQ快捷登录的好处 二、网站接入QQ快捷登录具体步骤 (1)登录到QQ互联官网 (2)进行个人开发者认证 (3)创建网站应用 (4)填写网站资料 三、如何在本地开发环境…

ERP原理与应用教程(作业1)

1.请对下图中所述的各管理理念和方法,分别用2-3句话对其进行解释说明。(答案不唯一,可自行补充) MRP(Material Requirements Planning)是物料需求规划的英文缩写。它是一种应用于生产管理的计划系统&#x…

入职字节测试岗外包一个月,我离职了...

有一种打工人的羡慕,叫做“大厂”。真是年少不知大厂香,错把青春插稻秧。但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂的“…

多元统计方法众多,分类还是排序?约束排序还是非约束排序?哪种方法或技术更适合我的研究目的或数据?

生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate statistical analysis)。多元统计分析内容丰富,应用广泛,是非常重要和…

【Git】git命令(全)

Git1、本地操作2、版本管理3、远端仓库4、分支管理5、缓存stash6、遗留rebase7、标签管理8、解决冲突9、参考教程10、示例代码1、本地操作 Linux安装git:yum install git查看git版本 git version查看git设置 git config --list设置git属性 git config --global初始…

鲁班软件使用明道云优化项目管理的全过程

一、关于鲁班软件 鲁班软件成立于2001年,是推动中国建筑业走进工程量电算化时代的开拓者;同时给最近很火的元宇宙提供了关键数字工具,推动智慧城市、智慧楼宇、数字中国建设,工具包括鲁班工程管理数字平台和鲁班BIM/CIM开发者平台…

第三章 集成jest做单元测试环境

1 集成jest做单元测试环境 首先附上项目目录的截图 接着就是搭建项目的大体流程: 1 通过yarn init -y生成package.json文件夹,并且在script中添加运行程序的命令代码,如图 2 创建src,reactivity,tests文件夹&#xf…

C语言--模拟实现库函数qsort

什么是qsort qsort是一个库函数,是用来排序的库函数,使用的是快速排序的方法(quicksort)。 qsort的好处在于: 1,现成的 2,可以排序任意类型的数据。 在之前我们已经学过一种排序方法:冒泡排序。排序的原理…

设置CentOS7的时间与网络同步

1.设置时区为北京时间 [rootlocalhost ~]# timedatectl set-timezone Asia/Shanghai 2.查看系统时间 [rootlocalhost ~]# timedatectl Local time: 四 2023-03-02 17:40:41 CST #系统时间 Universal time: 四 2023-03-02 09:40:41 UTC …

安卓APK打包流程浅析

在面试中,大公司会问你......APK打包流程全过程?APK签名在实际业务中能处理什么?APK加固原理是如何实现的,怎么保证安全?APK签名V1,V2,V3的区别于原理,有什么漏洞?这里只讲解打包流程的全过程。…

Phind-面向程序员的AI聊天对话机器人

ChatGPT在国内没开放,很多人注册不了。导致了很多人走illegal渠道获取账号密码。这样是不对的。 今天介绍一款面向程序员的ai聊天机器人Phind,ta目前可以不用注册直接使用、免费、也不用梯子。 (且用且珍惜,不知道之后会不会跟Cop…

Makefile的使用

Makefile的使用 自动化编译脚本,这个东西就是,进行简单的设置,然后实现原码编成为相应程序,简单化自己进行相关操作的过程。不需要一个个自己进行全部进行输入。而且还有许多的简化书写方法。 ​ 这个Makefile的本质为一种脚本语言…

SYSU程设c++(第二周) string、函数重载、constexpr、auto

创建string对象: string s1; // s1 未使用初始化参数,即默认初始化为空字符串 string s2 "c" ; //不是赋值运算,它等价于 string s2("c") ,是初始化 string s3 (5, s); // s4 初始化为 5 个 s; string…