读书人

关于对Selenium的了解

发布时间: 2012-09-20 09:36:50 作者: rapoo

关于对Selenium的理解

使用Selenium做Web自动化测试也不是一天两天了。直到最近看到TW内部的一位哥们的博客,才真的理解Selenium的发展历史。由于笔者开始使用的时候,已经是2.20.x,直接就上了WebDriver。其实有一些疑问还是一直在心中萦绕,不过现在清楚了。特此总结一下。

参考博客:http://tuohuang.thoughtworkers.org/?p=157


Selenium RC


早期的Selenium使用的是Javascript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Javascript,在Selenium内核启动浏览器之后注入这段Javascript。开发过Web应用的人都知道,Javascript可以获取并调用页面的任何元素,自如的进行操作。由此才实现了Selenium的目的:自动化Web操作。这种Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于Selenium内核对API翻译成的Javascript质量高低。


启动Selenium Server以及RC至今为止还保留着,应该是考虑到向前兼容吧,命令如下:

static{System.setProperty("webdriver.firefox.bin","C:/Program Files (x86)/Mozilla Firefox/firefox.exe");}FirefoxDriver driver = new FirefoxDriver();String url = "http://ap13933:8080";driver.manage().window().setSize(new Dimension(1440,1000));driver.get(url);WebElement name = driver.findElement(By.id("UserName"));WebElement pwd = driver.findElement(By.id("OldPassword"));while(!name.isDisplayed() || !pwd.isDisplayed())    sleep(100);        name.clear();pwd.clear();name.sendKeys(username);pwd.sendKeys(password);pwd.submit();

使用WebDriver的心得


其中WebDriver的更加面向对象的方式大大降低了Selenium的入门门槛,对Web元素的操作也非常之简单易学。实际项目用起来,工作量最大的部分就是你如何解析定位到你的目标项目页面中的各种元素。好比你要定位一个Button,你可以用ID,可以用CSS,可以用XPATH,你为了点击这个Button,写了一个函数调用Selenium里的API,即WebElement里的click()或者submit(),那么另外一个Button怎么办?成百上千个Button又怎么办?


所以,你需要有一套自己实现的算法或者封装,来根据项目页面的特点提供一套通用的元素定位方式。当你的通用定位逻辑能准确的找到任何一个元素的时候,剩下的事情就顺理成章了,交给Selenium WebElement的API就可以了。这一套定位逻辑笔者觉得才是使用Selenium做Web自动化工作量最大的部分。当然有的公司Web项目使用了自己开发的UI框架,例如笔者所在的公司,这样Web元素的定位规则和算法就比较容易设计。如果Web项目开发出来的页面代码比较杂乱无章,那么你就需要更加高明和严谨的逻辑去寻找你想要操作和查看的元素了!


在笔者的项目里,笔者自己设计并封装了一套通用的API,去智能的定位页面中的各种类型的元素。比如项目里的页面有大量的dialog和wizard,都是用div+css实现的。我就提供了一个dialog组件,带有next(),save(),finish(),click(String buttonName),cancel()等方法,然后根据遮罩层和loading Icon的时间来追踪操作完成的进度。这里只是举个小小的例子,有机会再分享更多的细节。



读书人网 >Web前端

热点推荐