【如何学习Python自动化测试】—— 多层窗口定位

6 、 多层窗口定位

      多层窗口指的是在操作系统图形界面中,一个窗口被另一个窗口覆盖的情况。在多层窗口中,如何定位需要操作的窗口?

      一种常见的方法是使用操作系统提供的Alt+Tab快捷键,可以在打开的所有窗口中快速切换焦点。如果需要在多个同级窗口中切换,还可以使用Alt+~(波浪号)键。

      对于多层窗口的情况,可以使用以下方法:

  1. 使用鼠标:通过点击窗口的标题栏或任务栏上该窗口的缩略图,可以将焦点快速切换到需要的窗口。

  2. 使用Alt+Tab:按住Alt键不放,然后反复按下Tab键,可以在所有打开的窗口间快速切换焦点。当需要定位的窗口被选中时,松开Alt键即可切换到该窗口。

  3. 使用Win+Tab:在Windows 10中,可以使用Win+Tab键来进入任务视图,该视图显示所有打开的窗口和虚拟桌面。使用鼠标或方向键,可以选择需要的窗口。

  4. 使用Alt+Esc:按下Alt+Esc键可以在打开的所有窗口中循环切换焦点,直到找到需要的窗口。

  5. 使用任务管理器:在需要的窗口没有响应或无法定位时,可以通过任务管理器来关闭或切换窗口。按下Ctrl+Shift+Esc键打开任务管理器,选择需要的窗口并点击“切换到”按钮或按下Alt+Tab键切换到该窗口。若窗口无响应,可以点击“结束任务”按钮关闭窗口。

6.1 多层框架定位

      在 web 的自动化测试工作中,通常会碰到一个元素无法定位的问题,检查了很多次, 依然得不到解决,此时就需要了解下 html 的 frame 框架了,frame 可以实现一个窗口 中显示多个 html 文件,而当我们使用 selenium 打开页面后,定位元素时,发现无法 定位,此时需要确定自己要操作的元素在哪个 frame 中。
      下面这段 html 代码是将百度的页面封装在一个 frame 中,如果还想之前那样操作,则 无法定位百度页面的元素,此时需要先定位到它所在的 frame 中,才能定位,使用switch_to_frame 方法切换不同的 frame。

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /> <title>test</title></head><body><div class="row-fluid"><div class="span6 well"><h3>test</h3><iframe id="f2" src="http://www.baidu.com"width="700"height="500"></iframe><h3>*******************</h3><a href="javascript:alert('watir-webdriver better than selenium webdriver;')">click</a></div></div></body>
</html>

将上面代码保存为 test.html ,运行结果如下:

在这里插入图片描述
      在这个案例中,我们可以直接定位到 click 这个链接,却无法定位到百度的搜索输入框, 通过上面的 html 代码能看出,百度的页面是放在 id 为 f2 的框架中,所以需要先切换到 f2 的框架,然后在定位到输入框。

from selenium import webdriver
导入 webdriverdriver = webdriver.Firefox()
打开浏览器driver.get('file:///D:/test/test.html')
打开 test.htmldriver.switch_to_frame('f2')
先切换到 f2 的 frame 框架中driver.find_element_by_id('kw').send_keys('test')
在定位百度的输入框driver.switch_to_default_content()
重新回到之前的 framedriver.find_element_by_tag_name('a').click()
此时才能操作 click 这个链接

      在切换到 f2 的 frame 之后,对里面的操作完成后,往往还要回到之前的 frame,才能继续下一步的操作,此时可以通过 switch_to_default_content()方法返回。

6.2 多层窗口定位

      在页面操作时,有些时候会出现多个窗口的情况,比如,点击一个链接后,会打开一个新的窗口,此时想要对新窗口进行操作时,就必须先切换到新的窗口才能继续操作, 可以通过switch_to_window()方法来实现。下面通过代码来实现点击一个创意项目之后,会弹出该项目的具体信息页面,此时需要切换到新页面才能操作。

from selenium import webdriver
导入 webdriverdriver=webdriver.Firefox()
打开 firefox 浏览器driver.get('http://www.chuangyijia.com/admin/login')
打开 LMD 的登陆页面driver.implicitly_wait(3)
driver.find_element_by_xpath('//form[@id="login"]/input[1]'). send_keys('lib@163.com')
输入邮箱driver.find_element_by_xpath('//form[@id="login"]/input[2]'). send_keys('12345678')
输入密码driver.find_element_by_xpath('//button[contains(text(),"登录 ")]').click()
点击登陆driver.implicitly_wait(3)
等待 3 秒driver.find_element_by_css_selector('#dashboard-menu > li:nth-child(2) > a:nth-child(1)').click()
点击待审核项目driver.find_element_by_link_text('预售管理').click() 
点击预售管理driver.find_element_by_css_selector('.table > tbody:nth- child(2) > tr:nth-child(1) > td:nth-child(4) > a:nth-child(1)').click()
点击预售管理中的第一个项目的标题,此时会弹出一个新的窗口 print driver.title
打印当前窗口的 title,输出结果说明, 此时还是在之前的窗口操作的,并没有切换到新的窗口window=driver.window_handles
获取当前所有的浏览器操作句柄driver.switch_to_window(window[1])切换到新窗口
print driver.title打印新窗口的 title

      从上面的案例中,我们需要先获取窗口的句柄,然后再进行切换的,句柄的规则是,按打开顺序来看,管理页面的窗口是第一个被打开的,那么他的句柄下标为 0,新窗口是第二个被打开的,那么它的句柄下标是 1。window 变量接收当前所有窗口的句柄,通过 switch_to_window(window[1])切换到新窗口,同样也可以通过 switch_to_window(window[0])回到之前的页面。

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

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

相关文章

第十三章 控制值的转换 - 处理UTC时区指示符

文章目录 第十三章 控制值的转换 - 处理UTC时区指示符 第十三章 控制值的转换 - 处理UTC时区指示符 对于支持XML的类&#xff0c;可以指定在从XML文档导入时是否使用UTC时区指示符。同样&#xff0c;可以指定是否在导出时包含UTC时区指示符。 为此&#xff0c;指定XMLTIMEZON…

GEE生物量碳储量——利用sens和MK检验方法计算1987-2022年森林地上生物量AGB和碳储量的时空变化特征

简介: 本文是将之前已经处理好的森林生物量和碳储量数据保存到GEE Assets中,然后分别将单张影像导入到代码编辑器中,构建一个时间序列集合,并且这里需要用到的是我们给影像添加指定的时间属性,这样方便进行下一步的时序分析和空间预测。 首先,需要收集1987年至2022年期…

C语言实现Linux下TCP Server测试工具

Linux TCP Server测试工具代码 实现了接受数据并输出文本和十六制字符串 #include <stdio.h> #include<string.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <signal.h> #include <arpa/inet.h> #incl…

STM32内存介绍

ROM是一种只读存储器&#xff0c;经历了从NOR Flash到NAND Flash再到现在的eMMC的发展。为了便于使用和大批量生产&#xff0c;ROM进一步分为了4种类型&#xff1a;PROM、EPROM、EEPROM和Flash。PROM只能被编程一次&#xff0c;EPROM可擦写可编程且可达1000次&#xff0c;EEPRO…

leetcode/hot100

文章目录 一、哈希1.两数之和2.字母异位词分组3.最长连续序列 二、双指针4. 移动零5.盛最多水的容器6.三数之和7.接雨水 三、滑动窗口8.无重复字符的最长子串9.找到字符串中所有字母异位词 四、子串10.和为 K 的子数组 一、哈希 1.两数之和 1. 两数之和 class Solution { pu…

规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法

文章目录 系列文章索引五、规则属性1、enabled属性2、dialect属性3、salience属性4、no-loop属性5、activation-group属性6、agenda-group属性7、auto-focus属性8、timer属性9、date-effective属性10、date-expires属性 六、Drools高级语法1、global全局变量2、query查询3、fun…

20231122给RK3399的挖掘机开发板适配Android12

20231122给RK3399的挖掘机开发板适配Android12 2023/11/22 9:30 主要步骤&#xff1a; rootrootrootroot-X99-Turbo:~$ tar --use-compress-programpigz -xvpf rk356x_android12_220722.tgz rootrootrootroot-X99-Turbo:~$ cd rk_android12_220722/ rootrootrootroot-X99-Tur…

rk3568 适配以太网(mac 2 mac)

rk3568 适配以太网(mac 2 mac) MDI(Media Dependent Interface)是以太网中的一种接口标准,用于连接物理层(PHY)和数据链路层(MAC)之间的传输介质。 在以太网中,MDI通常通过RJ-45插座来实现,用于连接网线和网络设备。MDI接口提供了电气和机械特性,使得PHY和MAC能够正…

Python通过串口收发文件

单位内外网是隔离的,USB对拷线被禁用,安全优盘使用太费事,就想到了通过串口传输文件. import serial from xmodem import XMODEM import osdef Send_File(filepath, portCOM8, baudrate115200):bn os.path.basename(filepath)filesize os.stat(filepath).st_sizestrSendFile…

带记忆的超级GPT智能体,能做饭、煮咖啡、整理家务!

随着AI技术的快速迭代&#xff0c;Alexa、Siri、小度、天猫精灵等语音助手得到了广泛应用。但在自然语言理解和完成复杂任务方面仍然有限。 相比文本的标准格式&#xff0c;语音充满复杂性和多样性&#xff08;例如&#xff0c;地方话&#xff09;,传统方法很难适应不同用户的…

【每日OJ —— 20.有效的括号(栈)】

每日OJ —— 20.有效的括号&#xff08;栈&#xff09; 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09;2.方法讲解2.1.解法2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;20.有效的括号&#xff08;栈&#xff09; 2.方法讲解 2.1.解法 利用…

2023 年 亚太赛 APMCM (B题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 问题一&#xff1a; 建立没有作物的玻璃温室内的温度和风速分…

C语言二十四弹--喝汽水问题

C语言解决喝汽水问题 题目&#xff1a;喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff1f; 方法一、逐瓶购买法 思路&#xff1a;一瓶瓶的买 当空瓶有两个时&#xff0c;汽水数加1即可。 #include &…

MacOS 成为恶意软件活动的目标

Malwarebytes 警告称&#xff0c;一个针对 Mac 操作系统 (OS) 的数据窃取程序正在通过虚假的网络浏览器更新分发给毫无戒心的目标。 Atomic Stealer&#xff0c;也称为 AMOS&#xff0c;是 Mac OS 上流行的窃取程序。 Atomic Stealer (AMOS) 恶意软件最近被发现使用“ClearFa…

ImportError: cannot import name ‘contextfilter‘ from ‘jinja2‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

汇编-pop出栈指令

32位汇编 执行动作分为两步&#xff1a; 第一步&#xff1a;读出数据 第二步&#xff1a;改变栈地址 如果操作数是16位&#xff0c; 则ESP加2&#xff1b; 如果操作数是32位&#xff0c; 则ESP加4 espesp2 或 espesp4 格式&#xff1a;

九、sdl显示bmp图片

前言 SDL中内置加载BMP的API&#xff0c;使用起来会更加简单&#xff0c;便于初学者学习使用SDL 如果需要加载JPG、PNG等其他格式的图片&#xff0c;可以使用第三方库&#xff1a;SDL_image 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12sdl2.0.22&…

力扣第462题 最小操作次数使数组元素相等 II C++ 排序基础 附Java代码

题目 462. 最小操作次数使数组元素相等 II 中等 相关标签 数组 数学 排序 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&a…

Python深入分享之闭包

闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中&#xff0c;我们见到过函数(function)&#xff1b;在面向对象编程中&#xff0c;我们见过对象(object)。函数和对象的根本目的是以某种…

substr()与substring()的区别

在 JavaScript 编程语言中&#xff0c;substr() 和 substring() 都是字符串函数&#xff0c;用于截取指定位置的子字符串。虽然这两个函数都可以用于截取字符串&#xff0c;但它们之间存在一些区别。 substr() 语法&#xff1a;string.substr(start,length) 参数值&#xff1a…