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

简介: 【如何学习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
导入 webdriver
driver = webdriver.Firefox()
打开浏览器
driver.get('file:///D:/test/test.html')
打开 test.html
driver.switch_to_frame('f2')
先切换到 f2 的 frame 框架中
driver.find_element_by_id('kw').send_keys('test')
在定位百度的输入框
driver.switch_to_default_content()
重新回到之前的 frame
driver.find_element_by_tag_name('a').click()
此时才能操作 click 这个链接

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

6.2 多层窗口定位

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

from selenium import webdriver
导入 webdriver
driver=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])回到之前的页面。


相关文章
|
1月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
249 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
16天前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
33 2
|
17天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
30天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
1月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
348 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
17天前
|
人工智能 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(4-2):渗透测试行业术语扫盲完结:就怕你学成黑客啦!)作者——LJS
网络空间安全之一个WH的超前沿全栈技术深入学习之路(4-2):渗透测试行业术语扫盲完结:就怕你学成黑客啦!)作者——LJS
|
17天前
|
安全 大数据 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(3-2):渗透测试行业术语扫盲)作者——LJS
网络空间安全之一个WH的超前沿全栈技术深入学习之路(3-2):渗透测试行业术语扫盲)作者——LJS
|
17天前
|
SQL 安全 网络协议
网络空间安全之一个WH的超前沿全栈技术深入学习之路(1-2):渗透测试行业术语扫盲)作者——LJS
网络空间安全之一个WH的超前沿全栈技术深入学习之路(1-2):渗透测试行业术语扫盲)作者——LJS
|
28天前
|
网络协议 Ubuntu 前端开发
好好的容器突然起不来,经定位是容器内无法访问外网了?测试又说没改网络配置,该如何定位网络问题
本文记录了一次解决前端应用集成到主应用后出现502错误的问题。通过与测试人员的沟通,最终发现是DNS配置问题导致的。文章详细描述了问题的背景、沟通过程、解决方案,并总结了相关知识点和经验教训,帮助读者学习如何分析和定位网络问题。
|
30天前
|
机器学习/深度学习 人工智能 架构师