01、多页面处理
做UI自动化的时候常常会遇到浏览器弹出新的Tab页,或者需要在多个网页服务之间来回取数据的情况。
比如在首页点击文章“Jmeter使用?”的链接,浏览器会弹出一个新的页面显示“Jmeter使用?”这篇文章的详情。此时如果用Selenium Webdriver去查找该页面中的元素,会发现抛出空指针报错。
这是因为Selenium Webdriver只能指向一个HTML页面,而此时Webdriver仍然指向首页,只能查找到首页的内容。
遇到这种情况我们需要用到句柄来处理不同页面的切换。
在使用句柄以前,我们先了解它的基本概念,我们可以把通过Selenium WebDriver打开的每一个页面都看做一个小球,每个小球有唯一的标识(这个标识就是句柄)。我们的手就相当于WebDriver,它通过获取所有的小球,依次遍历查看小球的详情(比如Title)来判断小球是不是我们要的页面。如果是,则通过小球的唯一标识(句柄),把WebDriver指向到我们需要的网页页面,然后再进行元素处理。
Selenium WebDriver 句柄处理Api:
• driver.getwindowhandles() 获取当前浏览器打开的所有页面
• driver.getwindowhandle() 获取当前“活跃”页面
• driver.getTitle() 获取当前“活跃”页面的标题
• driver.switchTo().windows(handleName) 切换“活跃”页面
通过上述Api,我们可以实现多页面的切换和处理:
02
Windows控件
UI自动化中常常遇到上传文件的场景,以百度图片上传为例,上传是基于Windows的控件完成的(点击上传以后,会弹出Windows文件系统,让你选择Windows路径下的文件)
Selenium只能处理网页元素,无法处理Windows控件,遇到这种情况我们可以基于JavaRobot来处理Windows的控件。JavaRobot类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件,可以实现Windows的自动化测试。
03
JavaRobot常用API
以处理Windows弹窗选择文件为例,当我们点击网页元素,出现Windows弹窗后,可按下述逻辑处理:
• 基于Tookit往剪贴板输入文件路径
• 使用JavaRobot Enter键将光标移动到输入框
• 使用JavaRobot CTRL+C 键拷贝剪贴板中的内容
• 使用JavaRobot CTRL+V 粘贴内容到光标出
• 使用JavaRobot ENTER键 关闭Windows弹窗并上传文件