在自动化测试过程中发现点击某个按钮后弹出了一个特别的窗口。
特点一,该窗口不关闭就无法切换到其他窗口。
特点二,该窗口无法使用开发人员工具进行探测。
这个特别的窗口就是模态窗口:
对话框一般分为两种类型:模态类型(modal)与非模态类型(modeless)。
所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框。
非模态对话框则不会强制此种特性,用户可以在当前对话框以及其他窗口间进行切换。(引用)
Holmos自带的跳转窗口的方法都需要一个参数url地址或者窗口title作为跳转依据,但是模态窗口无法使用开发人员工具进行探测,意味着拿不到url或者title就无法跳转到该窗口上。
这种情况下应该怎么办?如何跳转到一个没有跳转依据的窗口上?
已知Holmos提供可根据浏览器窗口handle属性确定窗口的唯一性。
而窗口的弹出一般都是由单击事件触发的,点击事件触发后,浏览器窗口的数量肯定会多一个。
抓取点击事件后handle的集合减去点击事件之前handle的集合,即得到新的窗口handle。
方法代码如下:
public void clickAndSelectModalDialog() throws BusinessException{
String popupWindowHandle = getPopupWindowHandle();
BrowserWindow currentWindow=Allocator.getInstance().currentWindow;
WebDriverBrowserWindow webDriverBrowserWindow=new WebDriverBrowserWindow(currentWindow.getDriver());
webDriverBrowserWindow.setWidowHandle(popupWindowHandle);
List<BrowserWindow> windows = new ArrayList<BrowserWindow>();
windows.add(webDriverBrowserWindow);
for(BrowserWindow window:windows){
if(window.getHandle().equalsIgnoreCase(popupWindowHandle)){
System.out.println("逮住窗口了");
window.focus();
break;
}
}
}
public String getPopupWindowHandle() throws BusinessException {
String popupHandle = null;
int maxTimeToWait = 15000;
int timeInterval = 1000;
int timeElasped = 0;
int attempt;