锁定老帖子 主题:研究一下jetty & selenium
精华帖 (0) :: 良好帖 (20) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-09
jetty的入门文章: 灰狐工作室的:http://docs.huihoo.com/jetty/1.html selenium yananay: http://www.iteye.com/topic/107276 一开始下载了:jetty 这里要说明 http://docs.codehaus.org/display/JETTY/Downloading+and+Installing#download 这页的下载地址可用..... sourceforge.net上的地址全部作废 我下载6.1之后: 写了HelloJetty public class HelloJetty { public static void main(String[] args) throws Exception { Server server = new Server(); BoundedThreadPool threadPool = new BoundedThreadPool(); threadPool.setMaxThreads(100); server.setThreadPool(threadPool); Connector connector = new SelectChannelConnector(); connector.setPort(8080); server.setConnectors(new Connector[] { connector }); WebAppContext context = new WebAppContext("webapp", "/webapp"); server.addHandler(context); server.setStopAtShutdown(true); server.setSendServerVersion(true); server.start(); server.join(); } } 项目下 建一个webapp目录 webapp | -testhtml.html | -testjsp.jsp //testhtml.html <html> abc </html> //----------------------- //testjsp.jsp <%String a="jsp"; //System.out.println(a); %><%=a %> 发现jsp不能运行 引用 HTTP ERROR: 404 NOT_FOUND RequestURI=/webapp/testjsp.jsp Powered by jetty:// 应该是少包的原因: 找到jsp2.1的安装包 jsp2.1.jar jsp-api-2.1.jar core-3.1.1.jar 加上之后 ------OK---------- 再下载个selenium RC 下来一看傻了眼.... NN多的包 找到selenium-java-client-driver.jar 导入项目中去. 写了一个 HellSelenium public class HelloSelenium extends TestCase { private Selenium selenium; public void setUp() throws Exception { String url = "http://www.iteye.com"; selenium = new DefaultSelenium("localhost", 4444, "*firefox", url);//4444是SeleniumServer默认的端口 selenium.start(); } protected void tearDown() throws Exception { selenium.stop(); } public void testGoogleTestSearch() throws Throwable { selenium.open("/search/"); selenium.type("query", "selenium"); selenium.click("link=论坛"); selenium.waitForPageToLoad("5000"); assertEquals("JavaEye论坛频道首页",selenium.getTitle() ); } } 跑了一下.... 引用 java.lang.RuntimeException: Could not contact Selenium Server; have you started it?
Catch body broken: IOException from cmd=getNewBrowserSession&1=*firefox&2=http%3A%2F%2Fwww.iteye.com -> java.net.ConnectException: Connection refused: connect at com.thoughtworks.selenium.DefaultSelenium.start(DefaultSelenium.java:70) at com.maodajun.webjetty.HelloSelenium.setUp(HelloSelenium.java:14) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 看来还是有问题 再看文档原来还要启动server端.... 引用 D:\server所在的目录>java -jar selenium-server.jar
10:21:50.625 INFO - Java: Sun Microsystems Inc. 1.6.0_03-b05 10:21:50.625 INFO - OS: Windows XP 5.1 x86 10:21:50.625 INFO - v0.9.2 [2006], with Core v0.8.3 [1879] 10:21:50.718 INFO - Version Jetty/5.1.x 10:21:50.718 INFO - Started HttpContext[/selenium-server/driver,/selenium-server /driver] 10:21:50.718 INFO - Started HttpContext[/selenium-server,/selenium-server] 10:21:50.718 INFO - Started HttpContext[/,/] 10:21:50.734 INFO - Started SocketListener on 0.0.0.0:4444 10:21:50.734 INFO - Started org.mortbay.jetty.Server@901887 再运行 弹出一个页面.... Skype也来捣乱 改成*iexplore 或把skype插件拆了 再运行..... 页面卡住了.... 刷新页面再运行... 引用 com.thoughtworks.selenium.SeleniumException: Timed out after 5000ms
at com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:73) at com.thoughtworks.selenium.DefaultSelenium.waitForPageToLoad(DefaultSelenium.java:510) at com.maodajun.webjetty.HelloSelenium.testGoogleTestSearch(HelloSelenium.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 鸟的....5秒都没打开.....太慢了点...再加大,9000秒 selenium.waitForPageToLoad("9000"); 发现是网断了.... 上了网之后改回5秒... 这个测试终于绿了.... -------------------------------------- 我又想能不能不用dos启动selenium来呢? 看了一 下API public class HelloSelenium extends TestCase { private Selenium selenium; private SeleniumServer ss; public void setUp() throws Exception { ss = new SeleniumServer(SeleniumServer.DEFAULT_PORT,true,false); ss.start(); String url = "http://www.iteye.com"; //大家不要太过分啊...robbin会杀人的. selenium = new DefaultSelenium("localhost", SeleniumServer.DEFAULT_PORT, "*firefox", url); selenium.start(); } protected void tearDown() throws Exception { selenium.stop(); ss.stop(); } public void testGoogleTestSearch() throws Throwable { selenium.open("/search/"); selenium.type("query", "selenium"); selenium.click("link=论坛"); selenium.waitForPageToLoad("5000"); assertEquals("JavaEye论坛频道首页",selenium.getTitle() ); } } 引用 java.lang.VerifyError: (class: org/openqa/selenium/server/SeleniumServer, method: assembleHandlers signature: (Z)V) Incompatible argument to function at com.maodajun.webjetty.HelloSelenium.setUp(HelloSelenium.java:15) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 板本错误???? 把所有的包拆开一看...... ....竟然selenium固化了一套jetty在里面..... 我倒....5.1.x 把我导入的包删去.... 引用 org.mortbay.util.MultiException[java.net.BindException: Address already in use: JVM_Bind]
at org.mortbay.http.HttpServer.doStart(HttpServer.java:686) at org.mortbay.util.Container.start(Container.java:72) at org.openqa.selenium.server.SeleniumServer.start(SeleniumServer.java:839) at com.maodajun.webjetty.HelloSelenium.setUp(HelloSelenium.java:16) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) java.net.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359) at java.net.ServerSocket.bind(ServerSocket.java:319) at java.net.ServerSocket.<init>(ServerSocket.java:185) at org.mortbay.util.ThreadedServer.newServerSocket(ThreadedServer.java:391) at org.mortbay.util.ThreadedServer.open(ThreadedServer.java:477) at org.mortbay.util.ThreadedServer.start(ThreadedServer.java:503) at org.mortbay.http.SocketListener.start(SocketListener.java:203) at org.mortbay.http.HttpServer.doStart(HttpServer.java:716) at org.mortbay.util.Container.start(Container.java:72) at org.openqa.selenium.server.SeleniumServer.start(SeleniumServer.java:839) at com.maodajun.webjetty.HelloSelenium.setUp(HelloSelenium.java:16) at junit.framework.TestCase.runBare(TestCase.java:125) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) dos下还开着一个server占着4444端口呢. 关了dos下的seleniumserver再跑 绿了.... 不过问题又出了 ..... 刚刚一开始写jettyserver全红了.... 看来6.1与5.1有本质上的不同啊.... 不得以...去找5.1的写法... Server server = new Server(); // 创建一个新的HttpServer SocketListener listener = new SocketListener();// 创建一个新监听器 listener.setPort(3003); // 设置监听端口为8080 server.addListener(listener ); // 将监听类注册到server中 server.addWebApplication("/webapp","webapp"); // 将这个web应用注册到这个Server中 server.start(); // 最后启动这个server 我本以为没什么问题但: 引用 2008-1-10 11:09:27 org.mortbay.http.HttpServer doStart 信息: Version Jetty/5.1.x 2008-1-10 11:09:27 org.mortbay.util.FileResource <clinit> 信息: Checking Resource aliases 2008-1-10 11:09:28 org.mortbay.util.Container start 信息: Started org.mortbay.jetty.servlet.WebApplicationHandler@d9660d Exception in thread "main" java.lang.NoClassDefFoundError: org/mortbay/log/Log at com.sun.org.apache.commons.logging.JettyLog.<init>(JettyLog.java:36) at com.sun.org.apache.commons.logging.LogFactory.getLog(LogFactory.java:35) at org.apache.jasper.servlet.JspServlet.<clinit>(JspServlet.java:100) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:494) at java.lang.Class.newInstance0(Class.java:350) at java.lang.Class.newInstance(Class.java:303) at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:199) at org.mortbay.jetty.servlet.ServletHolder.start(ServletHolder.java:240) at org.mortbay.jetty.servlet.ServletHandler.initializeServlets(ServletHandler.java:446) at org.mortbay.jetty.servlet.WebApplicationHandler.initializeServlets(WebApplicationHandler.java:321) at org.mortbay.jetty.servlet.WebApplicationContext.doStart(WebApplicationContext.java:509) at org.mortbay.util.Container.start(Container.java:72) at org.mortbay.http.HttpServer.doStart(HttpServer.java:708) at org.mortbay.util.Container.start(Container.java:72) at com.maodajun.webjetty.WebStart.main(WebStart.java:41) 这个问题上卡了半天... 左找右找.... 直到我看到了这个 把jsp2.1的包换成2.0的包....lib文件数好多啊 第一阶段的改造基本完成 -------------- 我把一个webserver一个seleniumserver同时启动 之后再写一个测试 public class HelloWebSelenium extends TestCase { Server server ; SeleniumServer ss ; Selenium selenium; public static void main(String[] args) { junit.textui.TestRunner.run(HelloWebSelenium.class); } protected void setUp() throws Exception { super.setUp(); ss = new SeleniumServer(); server = new Server(); SocketListener listener = new SocketListener(); listener.setPort(3003); server.addListener(listener ); server.addWebApplication("/webapp","webapp"); server.start(); ss.start(); selenium = new DefaultSelenium("localhost", SeleniumServer.DEFAULT_PORT, "*firefox", "http://localhost:3003/webapp/"); selenium.start(); } protected void tearDown() throws Exception { server.stop(); ss.stop(); super.tearDown(); } public void testJettyServer() throws IOException, URISyntaxException{ URL url = new URI("http://localhost:3003/webapp/test.jsp").toURL(); InputStream in = url.openStream(); BufferedReader br= new BufferedReader(new InputStreamReader(in)); String str = br.readLine(); assertEquals("jsp",str); } public void testJettyServerbyWebClient() throws MalformedURLException { selenium.open("/webapp/test.jsp"); selenium.click("link=test"); selenium.waitForPageToLoad("3000");//自己本地的还是很快的... assertEquals("abc",selenium.getBodyText() ); } } 在test.jsp里写: <a href="test.html" value = "test">test</a> 在test.html里写: <html> abc </html> 运行一下....OK了.... 不过有候会被卡住.... 出 引用 7125 [SocketListener0-2] WARN org.mortbay.http.HttpConnection - POST http://localhost:3003/selenium-server/driver/?&localFrameAddress=top&seleniumWindowName=&uniqueId=sel_17535&sessionId=767859&counterToMakeURsUniqueAndSoStopPageCachingInTheBrowser=1199938773453&sequenceNumber=2 HTTP/1.1
java.net.SocketException: No buffer space available (maximum connections reached?): recv failed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at org.mortbay.util.LineInput.fill(LineInput.java:477) at org.mortbay.util.LineInput.read(LineInput.java:352) at java.io.FilterInputStream.read(FilterInputStream.java:111) at org.mortbay.http.HttpInputStream.read(HttpInputStream.java:120) at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411) at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183) at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:132) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:118) at java.io.InputStreamReader.read(InputStreamReader.java:151) at org.openqa.selenium.server.SeleniumDriverResourceHandler.readPostedData(SeleniumDriverResourceHandler.java:251) at org.openqa.selenium.server.SeleniumDriverResourceHandler.handleBrowserResponse(SeleniumDriverResourceHandler.java:169) at org.openqa.selenium.server.SeleniumDriverResourceHandler.handle(SeleniumDriverResourceHandler.java:125) at org.mortbay.http.HttpContext.handle(HttpContext.java:1530) at org.mortbay.http.HttpContext.handle(HttpContext.java:1482) at org.mortbay.http.HttpServer.service(HttpServer.java:909) at org.mortbay.http.HttpConnection.service(HttpConnection.java:816) at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982) at org.mortbay.http.HttpConnection.handle(HttpConnection.java:833) at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244) at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534) 或者是没有响应测试也不结束..... ------------------------------------ 这些可能是由于多次启动停止seleniumserver的原因...所以可以把 selenium放到testsuit中去.... 引用 连接被重置 载入页面时到服务器的连接被重置。 * 此站点暂时不可用或者太忙。请稍后重试。 * 如果您无法载入任何页面,请检查您计算机的网络连接。 * 如果您的计算机受到防火墙或代理服务器的保护,请确认 Firefox 被授权访问网页。 这个可能是由于没有设定连接数....线程被卡住了. --------------- 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-02-02
很强大的调试能力啊~
java.lang.NoClassDefFoundError: org/mortbay/log/Log 我看着这个错,怎么也想不到会是jsp兼容性问题。 顶你下。 |
|
返回顶楼 | |
发表时间:2008-02-12
老兄能将整个搭建过程都记录下来实属难得~~~为我等扫清了不少障碍。
人真厚道 ! |
|
返回顶楼 | |
发表时间:2008-02-13
aoaoao 写道 很强大的调试能力啊~
java.lang.NoClassDefFoundError: org/mortbay/log/Log 我看着这个错,怎么也想不到会是jsp兼容性问题。 顶你下。 由于都是开源的所以.....我把代码跟到了源代码里面去了. PS:十在是逼的没办法了. |
|
返回顶楼 | |
发表时间:2008-02-14
这个风格很好啊,以风趣的语气把整个过程,包括出错,怎么解决的过程都记录
下来,顶了... |
|
返回顶楼 | |
发表时间:2008-02-15
Selenium是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla和Firefox等。这个工具的主要功能包括:测试与浏览器的兼容性--测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能--创建衰退测试检验软件功能和用户需求。
是不是和loadrunner是差不多类型的工具? |
|
返回顶楼 | |
发表时间:2008-02-19
无法再现错误:
当请求html页面时没有错误,请求jsp页面时发生错误. 如果你的错误信息中包含以下信息,请尝试使用 jdk1.5 (当你使用的是jsp2.1的时候) org.apache.jasper.runtime.JspFactoryImpl:WARN: Exceptio n initializing page context java.lang.VerifyError: (class: org/apache/jasper/runtime/PageContextImpl, method : getELResolver signature: ()Ljavax/el/ELResolver;) Incompatible argument to function at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:141) at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:94) at org.apache.jsp.main_jsp._jspService(org.apache.jsp.main_jsp:59) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:477) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:371) ..... |
|
返回顶楼 | |
发表时间:2008-02-19
佩服lz的耐心,在重重困窘中能够找到出路!
开源就是好啊 :)根据exception可以找到必要的信息 |
|
返回顶楼 | |
发表时间:2008-07-16
我想问下关于selenium RC运行录制的代码,会提示说没有权限,是在 WaitForPageToLoad这里停止的,你知道原因么?谢谢!!!
|
|
返回顶楼 | |
发表时间:2008-09-09
JoeDanny 写道 无法再现错误:
当请求html页面时没有错误,请求jsp页面时发生错误. 如果你的错误信息中包含以下信息,请尝试使用 jdk1.5 (当你使用的是jsp2.1的时候) org.apache.jasper.runtime.JspFactoryImpl:WARN: Exceptio n initializing page context java.lang.VerifyError: (class: org/apache/jasper/runtime/PageContextImpl, method : getELResolver signature: ()Ljavax/el/ELResolver;) Incompatible argument to function at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:141) at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:94) at org.apache.jsp.main_jsp._jspService(org.apache.jsp.main_jsp:59) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:477) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:371) ..... 我遇到了,不知如何解决 |
|
返回顶楼 | |