Selenium2.0之WebDriver

本文深入探讨了WebDriver在不同场景下的应用,包括选择条件、实现方式、常用函数接口、表单填写、页面导航、元素操作、弹出对话框处理、页面与frame间移动、Cookies管理等核心功能。同时,对比了不同浏览器驱动器的特点,提供了多种浏览器支持的解决方案,为开发者提供了全面的浏览器自动化测试工具使用指南。
摘要由CSDN通过智能技术生成
1、什么情况下选用WebDriver?
(1)Selenium-1.0不支持的浏览器功能。
(2)multiple frames, multiple browser windows, popups, and alerts.
(3)页面导航。
(4)下拉。
(5)基于AJAX的UI元素。

2、WebDriver的几个实现:
Name of driver              Available on which OS?      Class to instantiate
HtmlUnit Driver             All                         org.openqa.selenium.htmlunit.HtmlUnitDriver
Firefox Driver              All                         org.openqa.selenium.firefox.FirefoxDriver
Internet Explorer Driver    Windows                     org.openqa.selenium.ie.InternetExplorerDriver
Chrome Driver               All                         org.openqa.selenium.chrome.ChromeDriver

(1)HtmlUnit Driver是纯java的驱动器,全部在内存中运行,不会实际打开浏览器,但其速度很快。
(2)Firefox Driver:速度慢。

3、WebDriver常用的函数接口(以HtmlUnitDriver为例)
WebDriver driver = new HtmlUnitDriver();
(1)页面导航:
driver.get( "http://www.google.com" ); 完全装载页面后将控制返回给测试脚本。
注意:当页面又很多AJAX调用时,该接口无法确认页面是否完全装载,这是需要使用"waits"。
(2)与页面交互
例如:<input type= "text" name= "passwd" id= "passwd-id" />
WebElement element;
element = driver.findElement(By.id( "passwd-id" ));
element = driver.findElement(By.name( "passwd" ));
element = driver.findElement(By.xpath( "//input[@id=’passwd-id’]" ));
(XPATH返回第一个匹配到的元素,如果没有匹配到,抛出NoSuchElementException)
element.sendKeys( "some text" );
element.sendKeys( " and some" , Keys.ARROW_DOWN); (按向下箭头)
(任何页面元素都可以调用sendKeys,例如可以测试一些快捷方式键,键盘的每次输入都是附加在文本串的后面)
element.clear(); 清除文本域内容

4、填写表单
(1)处理SELECT标签:
WebElement select = driver.findElement(By.xpath( "//select" ));
List<WebElement> allOptions = select.findElements(By.tagName( "option" ));
for (WebElement option : allOptions) {
System.out.println(String.format( "Value is: %s" , option.getValue()));
option.setSelected();
}
(2)使用Select类处理SELECT标签:
Select select = new Select(driver.findElement(By.xpath( "//select" )));
select.deselectAll();
select.selectByVisibleText( "Edam" );

5、提交:
(1)driver.findElement(By.id( "submit" )).click();
(2)element.submit();(要求element必须在表单中,否则抛出NoSuchElementException)

6、检查元素是否在页面上(并且可以获取元素的尺寸和位置,拖拉元素):
WebElement plain = driver.findElement(By.name( "q" ));
RenderedWebElement element = (RenderedWebElement) element;(例如HtmlUnit Driver就无法显示出内容)

对元素拖拉:
RenderedWebElement element = (RenderedWebElement) driver.findElement(By.name( "source" ));
RenderedWebElement target = (RenderedWebElement) driver.findElement(By.name( "target" ));
element.dragAndDropOn(target);

7、在窗口和frame之间移动
(1)在命名的窗口之间移动:switchTo
driver.switchTo().window( "windowName" ); (可以通过js或者打开窗口的链接获取窗口名称)
(2)也可通过窗口句柄切换:
for (String handle : driver.getWindowHandles()) {
driver.switchTo().window(handle);
}
(3)frame之间切换或者切换到iframe:
driver.switchTo().frame( "frameName" );
通过索引访问subframe:
driver.switchTo().frame( "frameName.0.child" );(frameName的第一个subframe的明价child的frame)

8、弹出对话框:
窗口弹出后,可以使用如下语句访问到弹出窗口:
Alert alert = driver.switchTo().alert();
获取到alert窗口后,可进行各种操作。

9、页面导航:
navigate().to()和get()功能完全一样。
driver.navigate().to( "http://www.example.com" );

浏览器的前进和后退
driver.navigate().forward();
driver.navigate().back();
(注意这两个方法取决于浏览器的实现,可以会出现某些调用失败)


10、Cookies(必须首先在目标url域上)
// Go to the correct domain
driver.get( "http://www.example.com" );
// Now set the cookie. This one’s valid for the entire domain
Cookie cookie = new Cookie( "key" , "value" );
driver.manage().addCookie(cookie);
// And now output all the available cookies for the current URL
Set<Cookie> allCookies = driver.manage().getCookies();
for (Cookie loadedCookie : allCookies) {
System.out.println(String.format( "%s -> %s" , loadedCookie.getName(), loadedCookie.getValue()));
}

12、WebDriver支持的浏览器不如Selenium RC多:
为了支持更多的浏览器并且使用WebDriver API,可以使用SeleneseCommandExecutor
Capabilities capabilities = new DesiredCapabilities()
capabilities.setBrowserName( "safari" );
CommandExecutor executor = new SeleneseCommandExecutor( "http:localhost:4444/" , "http://WebDriver driver = new RemoteWebDriver(executor, capabilities);

这种方法的限制条件:目前findElements方法不能使用,并且首先js沙盒。


本文转自:http://katrina-lxd.blog.sohu.com/167646699.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值