【转】Selenium2 API详解
【转自】http://blog.csdn.net/wuxuehong0306/article/details/49762961
打开浏览器
Ø 打开firefox浏览器
WebDriver driver =newFirefoxDriver();
Ø 打开IE浏览器(需要IEDriverServer.exe支持)
WebDriver driver =newInternetExplorerDriver ();
Ø 打开HtmlUnit浏览器
WebDriver driver = newHtmlUnitDriver();
Ø 打开chrome浏览器(需要chromedriver.exe)
WebDriver driver =new ChromeDriver();
最大化浏览器
Ø firefox,IE浏览器:
driver.manage().window().maximize();
Ø 打开chrome浏览器:(上面的方法资料显示可以最大化chrome浏览器,不过测试后发现不成功,原因未知,故用下面的方法)
ChromeOptionsoptions = new ChromeOptions();
options.addArguments("user-data-dir=" +userProfile,"--disable-prerender-local-predictor","--incognito","--start- maximized");
driver =newChromeDriver(options);
关闭浏览器
Ø driver.close(); //关闭当前窗口
Ø driver.quit(); //关闭所有打开的窗口
有时候我们需要关闭主页意外的所有窗口,这个时候就需要做逻辑判断,灵活使用close这个方法了
publicvoid closeOtherWindows() {
for(String windows : driver.getWindowHandles())
if(!windows.equals(main_window)) {
driver.switchTo().window(windows);
driver.close();
}
driver.switchTo().window(main_window);
}
main_window是主页的窗口句柄,在打开
打开页面
driver.get("http://www.baidu.com");
driver.navigate().to("http://www.baidu.com/");
navigate方法会产生1个Navigator对象,navigate同时支持页面前进、后退、刷新
driver.navigate().forward
driver.navigate().back
driver.navigate().refresh
获取页面的标题
driver.getTitle();
Cookie
Ø 删除cookie
driver.manage().deleteAllCookies();
Ø 增加cookie
driver.manage().addCookie(<Cookie>);
Ø 获取所有cookie
Set<Cookie> cookiesSet = driver.manage().getCookies();
for (Cookie c : cookiesSet) {
String cookies+= c.getName() + "=" + c.getValue() + ";";
}
Ø 获取所有指定cookie
Set<Cookie> cookiesSet = driver.manage().getCookies();
for (Cookie c : cookiesSet) {
if (c.getName().equals(cookieName)){
Stringcookies += c.getName() + "=" + c.getValue() + ";";
}
}
页面元素定位
Webdriver提供下面两种方法来定位页面元素,参数是By对像,最常用是id和name查找。
Ø findElement 定位某个元素,WebElement类型
Ø findElements 定位一组元素,List<WebElement>类型
支持的元素定位方法有:
By.id:driver.findElement(By.id("id));
By.name:driver.findElement(By.name("name"));
By.xpath:driver.findElement(By.xpath("//input[@id='id']"));
By.className:driver.findElement(By.className("input_class"));
By.cssSelector:driver.findElement(By.cssSelector(".input_class"));
By.linkText:driver.findElement(By.linkText("link"));
By.partialLinkText:driver.findElement(By.partialLinkText("link"));
By.tagName:driver.findElement(By.tagName("form"));
实际上常用的只有id,name,xpath,css,这四个足够定位到所有元素,而name据说以后将会废弃掉。
判断元素是否显示
element.isDisplay();
获取元素属性
element.getAttribute(<attribute>); //得到元素的属性值
输入框
element.sendKeys(“test”);//在输入框中输入内容:
element.clear(); //将输入框清空
element.getText(); //获取输入框的文本内容:
下拉选择框
select.selectByVisibleText(“A”);
select.selectByValue(“1”);
select.deselectAll();
select.deselectByValue(“1”);
select.deselectByVisibleText(“A”);
select.getAllSelectedOptions();
select.getFirstSelectedOption();
单选框
radio.click(); //选择某个单选项
radio.clear(); //清空某个单选项
radio.isSelected(); //判断某个单选项是否已经被选择
多选框
checkbox.click();
checkbox.clear();
checkbox.isSelected(); //判断多选框是否被选择
checkbox.isEnabled(); //判断多选框是否可用
按钮
btn.click(); //点击按钮
btn.isEnabled (); //判断按钮是否可用
Alert对话框
alert.accept(); //点击确定
alert.dismiss(); //点击取消
alert.getText(); //获取Alert对话框的文本
表单
approve.click();
approve.submit();//只适合于表单的提交
上传文件
driver.sendKeys(filePath);
这个方法并不适用于所有上传文件的步骤,有的需要借助autoIt这个工具,试具体的Web项目而定。
Windows 和 Frames之间的切换
driver.switchTo().defaultContent(); //返回到最顶层的frame/iframe
driver.switchTo().frame("leftFrame"); //切换到某个frame:
driver.switchTo().window("windowName"); //切换到某个window
需要注意的是,当从一个Frame1切换到另一个Frame2的时候,不能直接调用切换driver.switchTo().frame("Frame2");这里会出问题我们需要从Frame1返回到最顶层,再切换到Frame2,如:
driver.switchTo().frame("Frame1");
driver.switchTo().defaultContent();
driver.switchTo().frame("Frame2");
调用Java Script
JavascriptExecutor js =(JavascriptExecutor) driver;
js.executeScript("JS脚本");
WebDriver是可以直接调用JS脚本来处理页面的,改变页面的样式,比如需要把一个隐藏元素显示出来,就需要借助JS,WebDriver是无法直接操作隐藏元素的。本人对JS也不是太熟悉,只用到最常用的几个方法,这里就不详细介绍JS了。
给几个常用的调用JS的例子出来:
Ø 滚动到指定元素
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView()", element);
Ø 滚动到指定高度
((JavascriptExecutor)driver).executeScript("document.documentElement.scrollTop=" + height);
Ø 滚动到页面顶部
((JavascriptExecutor)driver).executeScript("var q=document.documentElement.scrollTop=0");
Ø 点击隐藏元素
((JavascriptExecutor)driver).executeScript("arguments[0].click();",element);
超时设置
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS); //识别元素时的超时时间
driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS); //页面加载时的超时时间
driver.manage().timeouts().setScriptTimeout(10,TimeUnit.SECONDS); //异步脚本的超时时间
页面的加载跟客户端的网络环境,服务器的性能等相关,加速的速度会有不同,一个页面也许几秒就加载完成,有时候可能需要几分钟甚至更久,用上面的几种方式势必会因网络问题使得我们不得不修改传入的时间参数,这个时候我们就需要有一个智能的等待时间,比如某个元素出现以后,我们就判定页面加载完成:
WebDriverWait driverWait =(WebDriverWait) new WebDriverWait(driver, 15, 500).ignoring(StaleElementReferenceException.class).withMessage("Timeout" +15);
try {
driverWait.until(newExpectedCondition<Boolean>() {
public Booleanapply(WebDriver driver) {
return (element.isDisplay());
}
});} catch(TimeoutException e) {
throw new WebDriverException("Nonew window prompted out.");
}
模拟键盘
Actions action = new Actions(driver);
action.sendKeys(<Keys>).perform();
键盘上的每一个按键都有对应的Keys
截屏
File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
部分移动端API
driver .launchApp(); //打开App
driver.closeApp(); //关闭App
driver.installApp (AppPath); //安装App
driver.removeApp(); //卸载App
driver.tap(1, element, pressTime); //单击指定元素
driver.tap(1, x,y, pressTime); //单击指定坐标
androidDriver.swipe(startX, startY, endX, endY, duration); //滑动屏幕
driver.setNetworkConnection(new NetworkConnectionSetting(false,true, true)); //连接wifi
driver.setNetworkConnection(new NetworkConnectionSetting(false,false, true));//断开wifi
driver.setNetworkConnection(new NetworkConnectionSetting(true,false,false)); //开启飞行模式
【转】Selenium2 API详解的更多相关文章
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- jqGrid APi 详解
jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...
- hibernate学习(2)——api详解对象
1 Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- 转】Mahout推荐算法API详解
原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...
- dom4j api 详解--XPath 节点详解
dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...
- 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:
原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...
- 【Unity编程】Unity中关于四元数的API详解
本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...
- SDN 网络系统之 Mininet 与 API 详解
SDN 网络系统之 Mininet 与 API 详解 Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持.本文主要介绍了 Mininet 的相关概念与特性,并列 ...
随机推荐
- EA类图与代码同步
画了一段时间的图,愈发感觉到EA是一个强大的软件,而不不过一个绘图工具那么简单. . 随着学习时间的延长.如今写程序并不能像曾经一样随心所欲,想到什么就敲什么了,而是要先绘图(也就是理需求和思路的过程 ...
- shell export 命令
export 命令作用是 把变量导出 也可以用export来定义环境变量 导入 定义的变量 这样的话类似于python面向对象的self.变量 一样 在脚本到处调用这个变量
- java-mybaits-010-mybatis-spring-使用 SqlSession、注入映射器
一. SqlSession概述 在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession.一旦你获得一个 session 之后,你可以使用它来执行映射语句, ...
- IScroll5中文API整理,用法与参考
IScroll是移动页面上被使用的一款仿系统滚动插件.IScroll5相对于之前的IScroll4改进了许多,使得大家可以更方便的定制所需的功能了. 做项目的时候正好用到了这个插件,自己做了一下总结, ...
- android唯一设备标识、设备号、设备ID的获取方法
##如何获取Android设备唯一ID? ###问题 每一个android设备都有唯一ID吗?如果有?怎么用java最简单取得呢? ###回答1(最佳) 如何取得android唯一码? 好处: 1.不 ...
- java, android的aes等加密库
https://github.com/scottyab/AESCrypt-Android https://github.com/PDDStudio/EncryptedPreferences ...
- maven+springboot项目使用idea打包
首先简单了解一下maven: 概述 日常开发中,我们用到的maven相关功能大概以下几种: 1. 管理jar依赖 2. 构建项目(打包.编译等) 3. 发布项目(共享.上传至服务器,供他人使用) 简单 ...
- [py]多态的理解
多态 不同的数据类型,执行相同的方法,产生的状态不同 不同对象调用相同的方法(运行时候的绑定状态) #!/usr/bin/env python # coding=utf-8 class H2O: de ...
- Kconfig文件说明2
Konfig详解: 当执行#make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是 ...
- vim多行注释和取消注释 Ubuntu
多行注释: 1. 进入命令行模式,按ctrl + v进入 visual block模式,然后按d 是选择到最后一行,也可以直接光标上下左右,把需要注释的行标记起来 2. 按大写字母I,再插入注释符,例 ...