【转自】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详解的更多相关文章

  1. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  2. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  3. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  4. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  5. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  6. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

  7. 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

    原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...

  8. 【Unity编程】Unity中关于四元数的API详解

    本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...

  9. SDN 网络系统之 Mininet 与 API 详解

    SDN 网络系统之 Mininet 与 API 详解 Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持.本文主要介绍了 Mininet 的相关概念与特性,并列 ...

随机推荐

  1. Day21 过滤器(Filter)

    day21     过滤器(Filter) 过滤器概述   1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个 ...

  2. 【云安全与同态加密_调研分析(7)】安全技术在云计算中的安全应用分析——By Me

                                                                   我司安全技术在云计算中的安全应用分析 1. 基于云计算参考模型,分析我司安 ...

  3. eclipse怎么导出可执行jar包

    在eclpse中找到你要导出的java程序 选中它 单击文件 -->export 在弹出的export对话框中找到 jar File 单击选中-->next 按图示顺序依次 选好你的jav ...

  4. Worst Performing Queries

    WITH TMP AS ( SELECT TOP 100 CAST(SUM(s.total_elapsed_time) / 1000000.0 AS DECIMAL(10, 2)) AS [Total ...

  5. 203-ReactDOM

    一.概述 加载方式: <script> ES6:import ReactDOM from 'react-dom' ES5:var ReactDOM = require('react-dom ...

  6. 【Cocos2dx 3.x Lua】TileMap使用

    1.编辑TileMap地图资源 2.Cocos2dx 3.x Lua中使用TileMap   Link: http://codepad.org/P0nFP1Dx  local TileMap=clas ...

  7. Linux 安装配置 Nginx

    前言 准备用flask做一个自己的博客网站,打算用Nginx来部署,所以在阿里云的服务器上安装Nginx,参考了很多教程,现在将步骤以及自己遇到的坑写下来,希望能对别人有所帮助. 我用的服务器是阿里云 ...

  8. Polya

    using namespace std; typedef long long LL; const int MAXN = 1e3 +10; const LL MOD = (LL)1 << 6 ...

  9. javascript 快速排序方法

    "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元 ...

  10. 钉钉,连续获取Token一样么? Js_ticket重复获取一样么?

    经过测试,是一样的: Token的过期时间是2个小时: 2个小时后在获取则发生变化: js_ticket:  重复获取的值不同的: