fest + selenium进行In-browser Applet自动化测试
2013-01-20 12:09
691 查看
festselenium项目背景:
基于浏览器的Applet使用开源方法进行自动化测试一直是一个难题。希望这篇文章能够为你提供一个开源的参考方案。如果你使用Java Swing进行Applet或者GUI开发,你就可能使用过fest进行单元测试或者Acceptance测试。fest简单易用,它的用户包括:Google, Square, Eclipse Foundation, Oracle, IBM, Guidewire等等。同时许多公司都在使用Selenium进行网页方面的测试。如何能够把两者结合起来,就是我们讨论的话题。有老外开发了一个.net 的FEST-Selenium,能从一定程度上解决这个问题,他有以下不足之处:
1,不支持java,只能使用.net
2,我们不能重用fest简单的语法。
这个festselenium项目就是能够重用以前fest的测试代码,差不多不要修改就能通过selenium进行远端控制。festselenium自动实现client<->selenium<->fixture<->SUT的最终交互。
这是我以前写的一个自动测试框架,通过http://code.google.com/p/festselenium/ 能访问源代码。
Fest和Festselenium testcase代码比较
Fest示例:
dialog.comboBox("domain").select("Users"); dialog.textBox("username").enterText("alex.ruiz"); dialog.button("ok").click();
festselenium示例:
除了要新建一个selenium连接,用户几乎感觉不到中间已经多了selenium这一层// selenium setup
selenium = new DefaultJavaSelenium("localhost",4444, browserString , url);
selenium.start();
selenium.open(url);
// get the appletfixure to control fest JAppletFixture
AppletFixture dialog = selenium.applet(LIST_APPLET_ID)
// fest similar API for autmation testing
dialog.comboBox("domain").select("Users"); dialog.textBox("username").enterText("alex.ruiz"); dialog.button("ok").click();
完整流程Demo
step1~3和6和以前fest进行applet一样。4除了要新建一个selenium连接之外和fest测试代码是一样的。4到5就是这个项目的核心,完成festselenium测试代码-〉selenium调用-〉fest fixture的自动转换。1, 被测Applet代码:
package com.nemo.festselenium.demo; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import javax.swing.*; import javax.swing.text.JTextComponent; public class DemoApplet extends JApplet implements AdjustmentListener{ private static final long serialVersionUID = 1L; JScrollBar slider; JTextComponent text; JPanel panel; public void adjustmentValueChanged(AdjustmentEvent e) { text.setText(new Integer(slider.getValue()).toString()); } public DemoApplet(){ slider = new JScrollBar(JScrollBar.HORIZONTAL, 0, 1, 0, 100); text = new JTextArea("0"); panel = new JPanel(); panel.add(text); panel.add(slider); add(panel); slider.addAdjustmentListener(this); } }
2, 被测试对象fixture
package com.nemo.festselenium.demo; import org.fest.swing.fixture.JAppletFixture; public class JTestFixture extends DemoApplet { JAppletFixture fixture; public JTestFixture() { super(); setName("demo_applet"); fixture=new JAppletFixture(this); } public JAppletFixture getTestFixture() { return fixture; } }
3, 新建一个HTML,ID=demo_applet
<html> <head> <title>Test</title> </head> <body> <div> <object id="demo_applet" width="300" height="150" type="application/x-java-applet"> <param name="java_code" value="com.nemo.festselenium.demo.JTestFixture.class" /> <param name="java_archive" value="fest-swing-1.2a3.jar,fest-assert-1.1.jar,fest-util-1.1.jar,fest-reflect-1.2-SNAPSHOT.jar" /> </object> </div> </body> </html>
4,festselenium驱动selenium进行单元测试代码:
package com.nemo.festselenium.demo; import static org.junit.Assert.*; import org.junit.*; import com.nemo.festselenium.fixture.*; import com.nemo.festselenium.selenium.*; public class DemoTest { DefaultJavaSelenium selenium; @Before public void setUp() { selenium = new DefaultJavaSelenium("localhost",4444, "*iexplore" , "http://localhost:8080"); } @After public void tearDown() { selenium.stop(); } @Test public void test() { selenium.start(); selenium.open("demo_applet.html"); selenium.windowMaximize(); AppletFixture fixture = selenium.applet("demo_applet"); ScrollBarFixture scrollbar = fixture.scrollBar(); TextComponentFixture text = fixture.textBox(); scrollbar.scrollUnitUp(); assertEquals(text.text(), "1"); } }
5,把远端对象请求转化为Selenium的调用:
15:19:56.179 INFO - Command request: getNewBrowserSession[*iexplore, http://loca 15:20:04.659 INFO - Command request: open[demo_applet.html, ] on session a84fc32 15:20:08.223 INFO - Command request: windowMaximize[, ] on session a84fc3216d6c4 1f1865ab7a710189814 15:20:08.847 INFO - Command request: getEval[navigator.userAgent, ] on session a 84fc3216d6c41f1865ab7a710189814 15:20:09.378 INFO - Command request: getEval[window.document.getElementById("dem o_applet").getTestFixture().scrollBar().scrollUnitUp(), ] on session a84fc3216d6 c41f1865ab7a710189814 15:20:10.205 INFO - Command request: getEval[window.document.getElementById("dem o_applet").getTestFixture().textBox().text(), ] on session a84fc3216d6c41f1865ab 7a710189814
6,fest fixture继续完成后面的工作
相关文章推荐
- 使用Selenium对浏览器进行后退、前进和刷新操作
- Write Selenium tests with Junit In Eclipse
- selenium framework issues met in window 7 + OS X86 64bit system
- Selenium-webdriver系列教程(十)————使用jquery辅助进行测试
- 使用 PHPUnit 和 Selenium 进行测试
- NetBeans IDE 使用 PHPUnit 和 Selenium 进行测试
- (转)用Mock Object进行独立单元测试(Testing in isolation with mock objects)
- 使用python selenium进行自动化functional test
- 使用selenium webdriver进行元素定位
- Selenium+Python对开源中国官网进行模拟登录
- ArcGIS Engine进行编辑时,提示错误:Objects in this class cannot be updated outside an edit session [line_2]
- Use Selenium webdriver in Javascript
- Authentication in Loopback Applications Against Bluemix(在针对Bluemix的Lookback应用中进行身份认证)
- [Selenium]计算坐标进行拖拽,重写dragAndDropOffset
- firefox 利用 Selenium IDE 对 DBackup 进行自动化测试
- 使用 Selenium 和 TestNG 进行编程式测试
- Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出
- 初学 用 Selenium 进行功能测试
- [Selenium]当DOM结构里面有iFrame,iFrame里面是html,怎么send keys to 里面的body,怎么用Assert进行验证?
- 当json对象无法返回数组时,可用for in 进行遍历