Skip to content

Selenium2

springside edited this page Mar 14, 2012 · 20 revisions

##Overview WebDriver摇身一变成了Selenium2.0,对比与Selenium1.0,它直接调用浏览器核心API的方式,比1.0的JavaScript方式快了很多。另外,它的By的locator也比1.0时的String清晰。但它其他的API实在没有1.0方面。

所以, SpringSide在Core Module里提供了一个Selenium2.java的封装,让API重新变得友好。重新的封装时,参考了它那个向后兼容的WebDriverBackedSelenium的实现。

##Selenium2.java ###1. waitForPageLoad() selenium1.0的waitForPageLoad(timeout)函数没有了,而那些承诺会block住直到页面完全打开的get(url),click(by)函数,在firefox下一点效果没有。

好在有另一个解决方式,implicitlyWait会findByElement()失败时,隐式等待直到Element出现。 这样,就连1.0那句烦人的waitForPage()也省了。

driver.manage().timeouts().implicitlyWait(seconds, TimeUnit.SECONDS);

###2. open(url) 2.0的driver.get(url)居然必须输入完整路径,不许使用相对路径。只好抄了下兼容函数,如果路径是相对路径时,自动补上baseUrl.

###3. type(by,text) 2.0的type 不管input框里原来有没有值,只好自己补一个clean()上去.

###4. check/uncheck/isChecked系列 2.0没有checkbox的check这个概念,只有isSelected, 又帮它向后兼容了一把。

###5. Select系列 总算,在处理Select框时,support包里有个org.openqa.selenium.support.ui.Select,里面有一堆丰富的函数可用,如

s.getSelect(by).selectByValue(value);
s.getSelect(by).getFirstSelectedOption();

###6. getValue(by) 唉, WebElement这个抽象的对象里,getValue需要调用element.getAttribute("value")。

###7. waitfor系列 waitfor是Ajax 测试中很重要的功能,2.0的support包里另一个给力的对象,在Selenium2里封装了waitForTextPresent(by,text,timeout), waitForValuePresent(by,value,timeout), waitForVisible(by,timeout)

但ExpectedConditions里还有更多更多的条件可以使用,可调用如下

s.waitForCondition(ExpectedConditions.xxxxxx(yyy,zzz), timeout);

###8.其他1.0特有函数 isTextPresent(text),简单粗暴的看看页面里有没有出现某文本。

getTable(by, rowIndex,colIndex), 取得单元格中的text。

##HtmlUnitDriver 这是Driver并不使用真正的浏览器而是使用HtmlUnit,坏处是经常不支持JavaScript。 而好处是速度快,而且不需要XWindow。跑Jenkins的机器通常是没有XWindow的,解决方法是再找一台Windows机器起一个Selenium Server再用RemoteDriver连接过去。如果懒的话,就可以用这个HtmlUnitDriver,只跑一些重要但简单的用例。

SpringSide在Jenkins上就跑了HtmlUnitDriver来运行一些最简单的用例,起码保证Examples是能启动的。

返回参考手册