论坛首页 Java企业应用论坛

研究一下jetty & selenium

浏览 17065 次
精华帖 (0) :: 良好帖 (20) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-01-09  
趁还没有忘干净写下blog

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  被授权访问网页。

这个可能是由于没有设定连接数....线程被卡住了.
---------------
   发表时间:2008-02-02  
很强大的调试能力啊~
java.lang.NoClassDefFoundError: org/mortbay/log/Log
我看着这个错,怎么也想不到会是jsp兼容性问题。
顶你下。
0 请登录后投票
   发表时间:2008-02-12  
老兄能将整个搭建过程都记录下来实属难得~~~为我等扫清了不少障碍。
人真厚道 !
0 请登录后投票
   发表时间:2008-02-13  
aoaoao 写道
很强大的调试能力啊~
java.lang.NoClassDefFoundError: org/mortbay/log/Log
我看着这个错,怎么也想不到会是jsp兼容性问题。
顶你下。

由于都是开源的所以.....我把代码跟到了源代码里面去了.
PS:十在是逼的没办法了.
0 请登录后投票
   发表时间:2008-02-14  
这个风格很好啊,以风趣的语气把整个过程,包括出错,怎么解决的过程都记录
下来,顶了...
0 请登录后投票
   发表时间:2008-02-15  
Selenium是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla和Firefox等。这个工具的主要功能包括:测试与浏览器的兼容性--测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能--创建衰退测试检验软件功能和用户需求。
是不是和loadrunner是差不多类型的工具?
0 请登录后投票
   发表时间: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)
         ..... 
0 请登录后投票
   发表时间:2008-02-19  
佩服lz的耐心,在重重困窘中能够找到出路!
开源就是好啊 :)根据exception可以找到必要的信息
0 请登录后投票
   发表时间:2008-07-16  
我想问下关于selenium RC运行录制的代码,会提示说没有权限,是在 WaitForPageToLoad这里停止的,你知道原因么?谢谢!!!

0 请登录后投票
   发表时间: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)
         ..... 


我遇到了,不知如何解决
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics