Selenium - IWebDriver.SwitchTo() frame 和 Window 的用法
来源:互联网 发布:网络女主播排行榜2016 编辑:程序博客网 时间:2024/06/15 04:33
IWebDriver.SwitchTo().Frame(IWebElement frame)
如果一个页面是一个html元素, 只有一个head, 一个body, 那么使用IWebDriver.FindElement()查找页面中的任何一个元素都没有问题。但是,由于页面中<frame ... 的使用,使得一个原始的html页面中可以包含多个子html页面, 在这种情况下,使用IWebDrivr.FindElement()查找页面 某个元素,如果元素是属于元素大的html的, 那么没有问题。若该元素是属于某个子的<frame ...下的,获得页面元素会失败的。要想成功,首先要弄清楚该元素所属的frame的, 其次, 将IWebDriver切换到该frame, 然后再使用IWebDriver.FindElement()查找这个元素。
1. 获得页面元素所属于的frame, 拿到它的name属性。
2. 使用IWebDriver.FindElements()获得本页面中所有的frame, 使用ByTagName。
3. 循环遍历所有Frame,查找name属性相符的Frame。
4. 将IWebDriver焦点切换到该Frame, 查找要获得的页面元素。
例如, 我的页面元素如下:
这个页面中, 要想获得id是"testcategory"的span元素, 直接使用IWebDriver.FindElement(By.ID("testcategory"))是没有用的, 找不到这个element。
正确的代码如下:
using Se = OpenQA.Selenium;using SIE = OpenQA.Selenium.IE; SIE.InternetExplorerDriver driver = new SIE.InternetExplorerDriver(); // all frames IList<Se.IWebElement> frames = driver.FindElements(Se.By.TagName("frame")); Se.IWebElement controlPanelFrame = null; foreach (var frame in frames) { if (frame.GetAttribute("name") == "ControlPanelFrame") { controlPanelFrame = frame; break; } } if (controlPanelFrame != null) { driver.SwitchTo().Frame(controlPanelFrame); } // find the spane by id in frame "ControlPanelFrame" Se.IWebElement spanElement = driver.FindElement(Se.By.Id("testcategory"));
IWebDriver.SwitchTo().Window(string windowName)
在页面上点击一个button, 然后打开了一个新的window, 将当前IWebDriver的focus切换到新window,使用IWebDriver.SwitchTo().Window(string windowName)。
例如, 我点击按钮以后弹出一个名字叫做"Content Display"的window, 要切换焦点到新窗口的方法是, 首先,获得新window的window name, 大家不要误以为page tile就是window name 哦, 如果你使用driver.SwitchTo().Window("Content Display")是找不到window name 叫做"Content Display"的窗口的, 其实Window Name 是一长串数字,类似“59790103-4e06-4433-97a9-b6e519a84fd0”。
要正确切换到"Content Display"的方法是:
1. 获得当前所有的WindowHandles。
2. 循环遍历到所有的window, 查找window.title与"Content Display"相符的window返回。
大家明白了吧, 正确的代码:
using Se = OpenQA.Selenium;using SIE = OpenQA.Selenium.IE; public static string GoToWindow(string title, ref SIE.InternetExplorerDriver driver) { driver.SwitchTo().DefaultContent(); // get all window handles IList<string> handlers = driver.WindowHandles; foreach (var winHandler in handlers) { driver.SwitchTo().Window(winHandler); if (driver.Title == title) { return "Success"; } else { driver.SwitchTo().DefaultContent(); } } return "Window Not Found"; }
-------------------------------------------------aa-------------------------------------------
1.iFrame有ID 或者 name的情况
//进入id="frame1"的frame中,定位id="div1"的div和id="input1"的输入框。
dr.switchTo().frame("frame1");
dr.findElement(By.id("div1"));
dr.findElement(By.id("input1"))
2.如果一个iFrame既没有id,也没有name,通用情况
// 定位frame位置,并选取frame
WebElement frame=driver.findElement(By.xpath( "/html/body/div[2]/div[8]/div[2]/div[3]/div/div[2]/div/iframe" ));
driver.switchTo().frame(frame);
3.跳出iFrame
//跳出frame,进入default content;重新定位id="id1"的div
dr.switchTo().defaultContent();
dr.findElement(By.id("id1"))
- Selenium - IWebDriver.SwitchTo() frame 和 Window 的用法
- Selenium - IWebDriver.SwitchTo() frame 和 Window 的用法
- frame 和window的区别
- window 和 frame 对象
- window和frame
- frame,iframe,frameset的用法和区别
- javascript学习随笔(使用window和frame)的技巧
- javascript学习随笔(使用window和frame)的技巧
- javascript学习随笔(使用window和frame)的技巧
- javascript学习随笔(使用window和frame)的技巧
- javascript学习随笔(使用window和frame)的技巧
- js操作frame详细解说,window.opener和window.parent的区别
- wxpython Frame的用法
- Selenium 用法和实例
- 关于DOM中的window和frame
- XAF之Window, Frame和Template
- frameset,frame和iframe用法
- 简述html中框架Frame和Frameset的用法
- 计算机专业方面的期刊介绍
- CMCC_Common_厂商自测指南
- 如果EBS过时了,你却依旧称得上是一名顾问,那就对了 | 汉得情怀
- jni之hello world
- ubuntu系统从中文环境改成英文环境
- Selenium - IWebDriver.SwitchTo() frame 和 Window 的用法
- 安卓键盘弹出是底部布局整体上移实现
- 机器学习之—主成分分析(PCA)
- 调用企业信息查询接口展示数据并对外提供接口遇到的问题
- android 使用URL读取网络图片简单示例
- App上架重磅通知:App Store安全新规17年1月生效
- Linux五种IO模型性能分析
- 数据库分页
- 如何优化UGUI的ScrollRect