Selenium webdriver系列教程(6)—如何捕获弹出窗口

web自动化测试中点击一个链接然后弹出新窗口是比较司空见惯的事情。

  webdriver中处理弹出窗口跟处理frame差不多,以下面的html代码为例


window.html
<html>
<head><title>Popup Window</title></head>
<body>
<a id = "soso" href = http://www.soso.com/ target = "_blank">click me</a>
</body>
</html>

  下面的代码演示了如何去捕获弹出窗口


require 'rubygems'
require 'pp'
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :firefox
frame_file = 'file:///'.concat File.expand_path(File.join(File.dirname(__FILE__), 'window.html'))
dr.navigate.to frame_file
dr.find_element(:id =>'soso').click
# 所有的window handles
hs = dr.window_handles
# 当前的window handle
ch = dr.window_handle
pp hs
pp ch
hs.each do |h|
unless h == ch
dr.switch_to.window(h)
p dr.find_element(:id => 's_input')
end
end

  捕获或者说定位弹出窗口的关键在于获得弹出窗口的handle。

  在上面的代码里,使用了windowhandles方法获取所有弹出的浏览器窗口的句柄,然后使用windowhandle方法来获取当前浏览器窗口的句柄,将这两个值的差值就是新弹出窗口的句柄。

  在获取新弹出窗口的句柄后,使用switchto.window(newwindow_handle)方法,将新窗口的句柄作为参数传入既可捕获到新窗口了。

  如果想回到以前的窗口定位元素,那么再调用1次switch_to.window方法,传入之前窗口的句柄既可达到目的。   

最新内容请见作者的GitHub页:http://qaseven.github.io/

   

时间: 2024-08-31 23:24:17

Selenium webdriver系列教程(6)—如何捕获弹出窗口的相关文章

Selenium webdriver系列教程(5)—如何定位frame中的元素

在web ui自动化测试中,frame一直是令人头痛的问题,就像上班必须挤公车坐地铁一般,frame的问题总是令人气闷纠结为之黯然神伤. 以前在使用watir 1.6x的时候,frame也是颇为棘手的一个问题.不但要照本宣科的进行一系列的设置,而且在进行实际代码编写的过程中会遇到各种奇奇怪怪的问题.frame就像中国男足的后防线,问题多多难以解决. selenium webdriver处理frame比较简单,这点比某些测试工具要先进一些,令人身心愉悦. 以下面的html代码为例,我们看一下如何定

Selenium webdriver系列教程(7)—如何处理alert和confirm

以前使用watir 1.6x 的时候处理页面javascript弹出的alert和confrim窗口时必须借助autoit工具来辅助执行,就像中国男足职业联赛中高价聘请外援一般. 在selenium webdriver中,confirm和alert的处理再也不需要借助任何第三方工具了. 下面的html页面上有1个名为click的button,点击该button后就会弹出1个alert窗口. <html> <head> <title>Alert</title>

Selenium Webdriver系列教程(1)—快速开始

Selenium 1.x时代已经远去,它理应躺在历史的角落里,靠着壁炉烤着火,抽着旱烟,在袅袅的升起的青烟中回忆那曾经属于自己的美好时代. 不过事实却并非如此,现今原本早应退役的selenium 1.x却还是多数人坚定的选择,究其原因不过是1.x时代遗留下了大量的文档,代码,教程让人们误以为1.x还是这个年代的主流,还应该光鲜亮丽在前台演出属于它的美好.长江后浪推前浪,最为前浪的selenium 1.x的宿命应该是死在沙滩上. 好了,直入主题,由于开源社区不再维护selenium 1.x再加之更

Selenium Webdriver系列教程(2)—浏览器的简单操作

上一讲我们介绍了如何部署selenium 2.0的开发环境,这一讲我们将介绍如何使用selenium提供给我们的接口进行浏览器的简单操作. 本文将先介绍适合初级用户的一些常用方法,然后将对一些高级用法和实现源码进行稍微深入一些的分析. 如何打开一个测试浏览器 做自动化测试一般情况下我们都需要首先打开测试浏览器,浏览器开启后我们方可"命令"浏览器去打开新页面,点击特定的链接,判断具体的逻辑等等.因此该操作为"万里长征的第一步",必须给以重视.具体代码如下.需要注意的是

java selenium 操作弹出窗口示例代码_java

selenium 中如何处理弹出窗口 阅读目录 原理 测试页面的HTML Java 代码 原理 在代码里, 通过         Set<String> allWindowsId = driver.getWindowHandles(); 来获取到所有弹出浏览器的句柄,   然后遍历,  使用swithcto.window(newwindow_handle)方法. 就可以定位到新的窗口 测试页面的HTML <html> <head> <title>常见web

Q470系列使用IE浏览器不能弹出网页窗口,如何解决?(Win7)

1. 单击浏览器右上角[工具]菜单,选择[Internet选项].   2. 在[常规]中找到[选项卡],然后点击[设置].   3. 在[遇到弹出窗口时]的选项中,选择[始终在新窗口中打开弹出窗口].   4. 然后在[从位于以下位置的其他程序打开链接]的选项中,选择[新窗口],点击下方的[确定]即可.  

浏览器要怎么阻止弹出窗口

Internet Explorer 8 (简称 IE8)是为全世界所广泛使用的 Windows Internet Explorer 浏览器系列的最新版本,它集成了更多个性化.智能化.隐私保护的新功能,为您的网络生活注入新体验,让您每一天的网上冲浪更快捷.更简单.更安全,并且充 满乐趣. 浏览器的阻止窗口弹出功能,能避免用户在浏览网页的时候弹出多个跟本页不相关的广告网站,要知道很多网站都带有钓鱼程序,浏览器这个自带的功能保护了我们的电脑安全. 操作步骤 1.打开注册表编辑器,找到HKEY_CURR

flash getURL或navigateToURL弹出窗口被IE拦截方法

flash geturl或navigatetourl弹出窗口被ie拦截方法 ie7和firefox(我使用的版本是2.0.0.11)会阻止用navigatetourl方法打开新窗口,而as2中的geturl方法则不会,让人很不爽.既然项目选择了as3开发,就只能想办法来解决.   首先当然想到的是externalinterface了,测试发现还是会被blocked.后来想添加wmode会不会有所帮助,于是在页面中添加wmode属性为opaque,果然ok了.   现提供as3中的geturl方法

对话框-asp.net的一个弹出窗口问题

问题描述 asp.net的一个弹出窗口问题 asp.net下如何实现点击一个按钮弹出一个对话框,上面有名字,年龄等信息,然后输入内容确认后更新到数据库??? 解决方案 一个是用js的showDialog,一个是用jquery ui或者 extjs 或者 easyui的对话框,其实是通过层模拟出来的. 无论什么方式,都是将输入的内容提交到服务器上,服务器插入数据库. 解决方案二: 用层来模拟,如artDialog 或者直接window.open打开另外一个aspx页面传递参数进行读取数据库显示 解