【如何学习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])回到之前的页面。


ZShiJ
+关注
目录
打赏
0
1
1
0
82
分享
相关文章
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
134 61
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
474 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
131 61
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
246 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等