selenium 多窗口(windows)及ITargetLocator使用总结
1. selenium能实现窗口切换的原理
有些网页应用可能有很多的frame或者windows。那么selenium是如何区别不同的windows的呢? 它是这样做的, 一旦实例化webdriver对象,selenium的webdriver就会给每个窗口分配一个string字符串id,这个id叫做这个该窗口的句柄,每个窗口都有唯一的id,所以selenium就可以在不同的窗口间实现切换。
ps: 刷新整个页面以后,id会变化。
2. 常见命令
2.1 WindowHandle
目的: 获取当前句柄
string handble = driver.WindowHandle
2.2 WindowHandles
目的: 获取当前打开的所有句柄
ReadOnlyCollection<string> allHandles = driver.WindowHandles;
2.3 SwtichTo
根据string切换到另外一个句柄
public void SwitchWindowsHandle(IWebDriver driver, string currentHandles)
{
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
ReadOnlyCollection<string> allHandles = driver.WindowHandles;
wait.Until((_driver) => { return _driver.WindowHandles.Count != 1; });
foreach (string handle in allHandles)
{
if (handle != currentHandles)
{
driver.SwitchTo().Window(handle);
}
}
}
3. 使用JavaScript切换窗口
selenium只能得到窗口,切换窗口,但是要是我们想要新建一个窗口,并且输入一个已知的url,该如何显示? 这个时候就要用到JavaScript来进行补充。
IJavaScriptExecutor jscript = driver as IJavaScriptExecutor;
jscript.ExecuteScript("window.open()");
List<string> handles = driver.WindowHandles.ToList<string>();
driver.SwitchTo().Window(handles.Last());
driver.Navigate().GoToUrl(url);
4. 还能SwitchTo什么
我在用SwitchTo().Windows()时候发现, SwitchTo返回的是一个ITargetLocator类型的对象。就研究了一下ITarget是什么。
根据Selenium官网的介绍,一共可以返回八种类型的东西。
1.ActiveElement:
返回当前聚焦的元素,这个可以通过tab键来看,focus的元素通常都会被文本框圈出来。
2.Alert
返回当前active的Alert
3.DefaultContent()
返回页面中的第一个frame 或者 让页面有iframe的时候返回主页面。
driver.switchTo.frame("Frame_ID"); //从主页面切换到frame
driver.switchTo().defaultContent(); //从frame切到回到主页面
4.Frame(Int32)
根据index切换frame
driver.SwitchTo().Frame(0);
5.Frame(String)
根据frame的name或者id定位
6.Frame(IWebElement)
通过已经找到的IWebElment元素切换
IWebElement iframePart = driver.FindElement(By.ClassName(iframeClassName));
driver.SwitchTo().Frame(iframePart);
7.ParentFrame
选择当前选择的frame的parent, 要注意和SwitchTo()DefaultContent()的区别,一个是parent,一个是最顶级的。
8.Window
切换window
参考资料:
- Selenium WebDriver Switch Window Commands
- OpenQA_Selenium_ITargetLocator
- how-to-switch-between-frames-in-selenium-webdriver-using-java
- what-is-the-difference-between-driver-switchto-parentframe-and-driver-switch/51105138#51105138
本文希望对您有所帮助,如何问题可联系我的个人微信
![]()
selenium 多窗口(windows)及ITargetLocator使用总结的更多相关文章
- Python+selenium自动化测试中Windows窗口跳转方法
Python+selenium自动化测试中Windows窗口跳转方法 #第一种方法 #获得当前窗口 nowhandle=driver.current_window_handle #打开弹窗 drive ...
- Python3 Selenium多窗口切换
Python3 Selenium多窗口切换 以腾讯网(http://www.qq.com/)为例,打开腾讯网,点击新闻,打开腾讯新闻,点击新闻中第一个新闻链接. 在WebDriver中封装了获取当前窗 ...
- Python+Selenium学习--窗口切换及操作元素
场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...
- selenium webdriver窗口切换(上)
selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test201 ...
- selenium 多窗口切换(windows)
在web应用中,常常会遇见点击某个链接会弹出一个新的窗口,或者是相互关联的web应用 ,这样要去操作新窗口中的元素,这时就需要主机切换到新窗口进行操作..WebDriver 提供了switchTo() ...
- 转:Selenium Grid+JAVA +Windows 配置(Selenium 2.0)
Selenium-Grid 允许你在多台机器的多个浏览器上并行的进行测试,也就是说,你可以同时运行多个测试.本质上来说就是,Selenium-Grid 支持分布式的测试执行.它可以让你的测试在一个分布 ...
- python3 selenium 切换窗口的几种方法
第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄windows = driver.window_handles# 切换到当前最新打开的窗口driv ...
- selenium webdriver窗口切换(下)
多窗口切换有时候需要在不同的窗口切换,从而操作不同的窗口上的元素.在selenium1.0 中这个问题比较难处理.但WebDriver 提供了switcTo.window()方法可以切换到任意的窗口. ...
- selenium 切换窗口的几种方法
第一种方法: 使用场景: 打开多个窗口,需要定位到新打开的窗口 使用方法: # 获取打开的多个窗口句柄 windows = driver.window_handles # 切换到当前最新打开的窗口 d ...
随机推荐
- WCF服务编程 读书笔记——第2章 服务契约
操作重载诸如 C++ 和 C# 等编程语言都支持方法重载,即允许具有相同名称的两个方法可以定义不同的参数.例如,如下的 C# 接口就是有效的定义: interface ICalculator { in ...
- MySQL中如何为查询的数据添加自增序号、顺序呢?
背景介绍 很多时候我们在使用mysql查询数据的时候都会遇到一个问题,就是查询出来了一堆数据,但是查询的数据的表并没有序号,然而部分数据库显示工具是有外带序号显示,但是这种序号不是由sql产生的,而是 ...
- 设计模式1---单例模式(Singleton pattern)
单例模式Singleton 面试的时候,问到许多年轻的Android开发他所会的设计模式是什么,基本上都会提到单例模式,但是对 单例模式也是一知半解,在Android开发中我们经常会运用单例模式,所以 ...
- Java50道经典习题-程序2 输出素数
题目:判断101-200之间有多少个素数,并输出所有素数 分析:判断素数的方法:用一个数分别去除2到(这个数-1)的数,如果能被整除,则表明此数不是素数,反之是素数. public class Pro ...
- DEV 之 有些控件不允许拖动。
DEV 之 有些控件不允许拖动. 设置一个参数即可解决问题
- ASP.NET Core2.0杂项
一.添加自定义的路由. 1.1.默认的路由添加语句 Startup文件的ConfigureServices方法中添加: services.AddMvc();//添加MVC的服务 1.2 添加自定义的路 ...
- Spring Boot - Spring Cache
缓存 服务器自身(内存)的缓存 利用java程序中的变量 简单 集群环境中多个实例无法共享同步 缓存服务器(一般支持集群.分布式) Redis Memcached Spring中使用注解使用缓存 启动 ...
- Django Meta
Available Meta options abstract 如果为True,这个model就是抽象类 app_label 如果模型是在INSTALLED_APPS中的应用程序之外定义的,它必须声明 ...
- 清除clusternode
Import-Module FailoverClusters then clear-clusternode
- Web Server 在IIS上部署ASP.NET Core项目
在IIS上部署ASP.NET Core项目 一.配置应用程序池为无托管: 二.安装ASPNETCoreModule:(核心) 下载地址:https://go.microsoft.com/fwlink/ ...