Selenium窗口切换-----Selenium快速入门(六)
有时候,我们打开多个窗口,进行多窗口操作,那么窗口间该如何切换呢?
切换的方法有两个,一个是通过窗口标题来验证,另一个是通过窗口特定的内容来验证,这两个方法都要求得到的标题或内容是唯一的。
用到的相关方法有:
| 方法 | 说明 |
| String getTitle() | 返回当前窗口的标题 |
| String getPageSource() | 获取最后加载页面的源。如果页面在加载后被修改(例如,由JavaScript),则不能保证返回的文本是修改过的页面。 |
| String getWindowHandle() | 获得能唯一标识该驱动实例的句柄 |
| Set<String> getWindowHandles() | 获得一组句柄,可用来遍历所有打开的窗口 |
| WebDriver switchTo().window(String nameOrHandle) | 切换到指定窗口,如果窗口不存在,则抛出异常 NoSuchWindowException |
首先,我们要看看窗口的切换,前面两个方法getTitle()和getPageSource()都比较好理解。
getTitle():返回当前窗口的标题<title></title>标签之间的文本
getPageSource():返回当前窗口的html
getWindowHandle():返回当前窗口的句柄,句柄究竟是什么东西呢,从返回类型看,就是字符串,该字符串能唯一标识当前窗口。
我们打印出来看看
WebDriver driver=DriverHelper.CreateChromeDriver();
driver.get("http://www.cnblogs.com");
System.out.print(driver.getWindowHandle());
driver.close();
结果是:CDwindow-(AF044FCA260B465460C9346203D5D109),注意的是,每次运行返回的句柄都不一样。
从结果的字符串看,括号里一共32位,估计跟UUID有关,反正我们知道Selenium中,窗口的句柄就是字符串,该字符串能够唯一标识当前窗口即可。而getWindowHandles()则返回一组句柄,下面演示一下,如何切换窗口。
下面的例子是打开京东主页,打开家用电器的分类页,然后切换回主页。
//得到WebDriver
WebDriver driver=DriverHelper.CreateChromeDriver();
driver.get("http://www.jd.com"); //获得首页的标题
String indexTitle=driver.getTitle();
String indexWinH=driver.getWindowHandle(); //点击家用电器连接,新开一个窗口
WebElement element=driver.findElement(By.linkText("家用电器"));
element.click();
//等待5秒
Thread.sleep();
//切换到主页
driver.switchTo().window(indexWinH);
上面是用句柄切换,之所以能用句柄切换,是因为我们打开主页的时候,知道主页的句柄,如果不知道主页句柄,我们怎么切换呢?方法有两种,一种是通过标题,另一种是通过内容,这两个方法的本质是一样的,都是用页面中独一无二的内容来区分。
下面是用标题切换的代码
//得到WebDriver
WebDriver driver=DriverHelper.CreateChromeDriver();
driver.get("http://www.jd.com"); //获得首页的标题
String indexTitle=driver.getTitle();
//假如不知道句柄
//String indexWinH=driver.getWindowHandle(); //点击家用电器连接,新开一个窗口
WebElement element=driver.findElement(By.linkText("家用电器"));
element.click();
//等待5秒
Thread.sleep(); //遍历所有句柄,找到标题为indexTitle的窗口
for(String winH: driver.getWindowHandles())
{
//如果通过句柄找到的窗口的标题等于indexTitle,则切换到该窗口,并且跳出循环
if(driver.switchTo().window(winH).getTitle().equals(indexTitle))
{
driver.switchTo().window(winH);
break;
} }
如果是使用内容来区分,代码基本一致,只需要将getTitle()换成getPageSource()即可
//如果通过句柄找到的窗口的标题等于indexTitle,则跳转到该窗口,并且跳出循环
if(driver.switchTo().window(winH).getTitle().equals(indexTitle))
{
driver.switchTo().window(winH);
break;
} //如果内容包括xxxx,则切换到该窗口
if(driver.switchTo().window(winH).getPageSource().contains("xxxx"))
{
driver.switchTo().window(winH);
break;
}
Selenium窗口切换-----Selenium快速入门(六)的更多相关文章
- Selenium框架切换-----Selenium快速入门(七)
上一篇说了窗口的切换,本篇说说框架的切换. 切换框架:是指切换html中的iframe标签元素或者frame标签元素,注意,并不包括frameset 以下是常用的方法: 方法 说明 WebDriver ...
- Selenium+Java(十一)Selenium窗口切换
前言: Selenium在当前页面调整到新页面时打开了新的窗口,此时就需要跳转到新的窗口去,需要把窗口进行切换. 获取窗口句柄方法: 获取所有: //获取所有窗口句柄,返回的是set类型 driver ...
- Selenium with Python 002 - 快速入门
一.简单实例演示 1.创建 python_org_search.py: #!/usr/bin/env python from selenium import webdriver from seleni ...
- Python+Selenium - 窗口切换
当有新窗口出现时,并要在新窗口操作,步骤: 1.产生新窗口 2.获取所有窗口的句柄:driver.window_handles 3.切换函数:driver.switch_to.window(新窗口句柄 ...
- mybatis快速入门(六)
前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口 ...
- 隐式等待-----Selenium快速入门(九)
有时候,网页未加载完成,或加载失败,但是我们后续的代码就已经开始查找页面上的元素了,这通常将导致查找元素失败.在本系列Selenium窗口切换-----Selenium快速入门(六)中,我们就已经出现 ...
- selenium多表单切换以及多窗口切换、警告窗处理
selenium表单切换 在做UI自动化,有时候要定位的元素属性在页面上明明是唯一的.却怎么也不执行对元素的操作动作,这时候多半是iframe表单在作怪. 切入表单:iddriver.switch_t ...
- JS快速入门(二)
目录 JS快速入门(二) 结构图 BOM window对象 open() window子对象 location对象 history对象(了解) navigator 对象 screen对象 BOM 定时 ...
- selenium入门14 窗口切换
窗口切换: 当前窗口句柄 current_window_handle 所有的窗口句柄 window_handles 切换窗口 switch_to_window() #coding=utf-8 #切换窗 ...
随机推荐
- 三.jQuery源码解析之jQuery的框架图
这张图片是对jQuery源码截图,一点一点拼出来的. 现在根据这张图片来对jQuery框架做一些说明. 一.16~9404行可以发现,最外层是一个自调用函数.当jQuery初始化时,这个自调用函数包含 ...
- 浏览器禁用Cookie
做JavaWeb的都知道Session的底层是使用Cookie来实现的,服务器端会在本地文件中保存session信息,并将sessionID发给客户端(浏览器),浏览器就会把这个sessionID(准 ...
- Linux(Centos)安装配置SVN服务器
1. 安装SVN服务器: 检查是否已安装 # rpm -qa subversion 安装SVN服务器 # yum install httpd httpd-devel subversion mod_da ...
- asp.net webapi 自托管插件式服务
webapi问世已久,稀里糊涂的人哪它都当mvc来使,毕竟已mvc使用级别的经验就可以应对webapi. webapi和mvc在asp.net5时代合体了,这告诉我们,其实 它俩还是有区别的,要不现在 ...
- SQOOP 添加oracle 驱动
我的ORACLE 是11G ,找到ojdbc6.jar,放到sqoop 的lib 下面,我的是cloudera 集群,目录是 /opt/cloudera/parcels/CDH-5.10.0-1 ...
- 转载spring restemplate
什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效 ...
- 取出资源文件中的bitmap,并将其保存到TMemoryStream中,从资源里载入图象而不丢失调色板
从资源里载入图象而不丢失调色板 procedure loadgraphic(naam:string);var { I've moved these in here, so they exist on ...
- Xpath解析xml
Xpath解析xml其实最主要的是查找xml文档中信息,而且不需要了解xml文档结构 package com.huawei.xml; import java.io.InputStream;import ...
- ORA-10873
[问题现象] SQL> ALTER DATABASE OPEN; alter database open * ERROR at line 1: ORA-10873: file 36 needs ...
- 【poj2411】Mondriaan's Dream 状态压缩dp
AC传送门:http://vjudge.net/problem/POJ-2411 [题目大意] 有一个W行H列的广场,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法? [题解] 对于 ...