selenium2 run in Jenkins GUI testing not visible or browser not open but run in background浏览器后台运行不可见

简介:
http://wiki.hudson-ci.org/display/HUDSON/Tomcat
Tomcat from Windows
GUI Testing in Windows

Most Windows services -- including those run with the option "Allow service to interact with desktop" in Windows XP and Vista -- do not have access to many of the computer's resources, including the console display.  This may cause Automated GUI Tests to fail if you are running Apache Tomcat as a Windows Service and are doing any GUI testing. This is true at least for AWT and Abbot frameworks.  A typical error might look similar to this:

[junit] \# An unexpected error has been detected by HotSpot Virtual Machine:
[junit] \#
[junit] \# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d07baf4, pid=3260, tid=288
[junit] \#
[junit] \# Java VM: Java HotSpot(TM) Client VM (1.5.0_09-b03 mixed mode, sharing)
[junit] \# Problematic frame:
[junit] \# C [awt.dll+0xbaf4|awt.dll+0xbaf4]
[junit] \#

This limitation can be resolved by not running Tomcat as a Windows Service, but instead through a "Scheduled Task" as an Application that runs at logon. There are several options for doing this, an example would be  to run "$TOMCAT_HOME\bin\tomcat5.exe".  When setting up the scheduled task in Windows Vista consider choosing the check-box for "Run with highest privileges" from the general tab, as this removes the need to always provide administrator privileges and may resolve other issues as well.

*Note: This workaround/fix may or may not require an admin to be logged in during testing.  Running your tests while logged in as a standard user this is fine, but some modifications may need to be made for your individual configuration.

 

Running NetBeans application tests on Jenkins CI is quite easy. You just need to call the ‘test’ target in your NetBeans application’s build script (e.g. ANT build.xml) and Jenkins will do the rest. I initially setup Jenkins as a windows service to run my tests. This works fine for unit tests since they do not require a display to execute.

But recently I faced some issues when I wanted to run some functional (GUI) tests of a NetBeans platform app using a Jenkins job running on Windows. Since the Jenkins process could not access the windows display all the GUI tests were failing. On a linux box this issue is addressed by using X display such Xvnc (available as a Jenkins plugin), but of course I cannot use X display on windows!

After googling around I came across a possible solution which was to enable the option “Allow service to interact with desktop” for my Jenkins service. But as promising as it seemed it did not work, my GUI tests continued to fail :(

Then I decided to stop and disable the Jenkins windows service and just ran it from the windows command prompt using the refreshingly simple command “java -jar jenkins.war”. Voila!!! It worked all my GUI tests were running without any problem and I can even see the GUIs opening and closing automagically on my windows desktop.

This solution was confirmed when I later stumbled upon the wiki here, which shows how to run GUI tests on ‘Hudson’ (Jenkins’ original name before Oracle knocked its head on a rock!) using a Tomcat container running on Windows. Although I didn’t use a servlet container such as Tomcat the solution applies to my situation as well.

So there you are, if you want to run GUI tests on Jenkins CI running onWindows do not configure it as a windows service instead run it from the command prompt or set it up as a scheduled task to run on windows logon using the command “java -jar jenkins.war”.

http://stackoverflow.com/questions/9618774/jenkins-selenium-gui-tests-are-not-visible-on-windows

When I run my selenium test (mvn test) from jenkins (windows) I see only the console output. I don't see the real browsers getting opened . How can I configure jenkins so that I can see the browsers running the test?

 

这个问题今天终于解决了:

1,对于selenium testing的GUI或者是browser不能看到,visible。但是可以看到的是在后台这个浏览器已经启动了,它实际上是后台运行的。

这个原因就是windows设置的服务安全问题,在slave机器上运行测试时候,千万不要把其中的Jenkins-slave设置为windows的服务,而是转到前台运行,意思就是,在slave机器上的JNLP不能以服务启动,只能是如下的运行方式:

image

这里注意了,千万不要点击“File”设置为服务启动,如果设置了后,即使你勾选了这个服务中的“Log on” Tab中的check "interact with desktop" , the desktop that is being referred to is invisble .,

it works after running the agent using JNLP

参考一:http://stackoverflow.com/questions/13639358/integration-of-selenium-webdriver-with-hudson-unable-to-open-the-browser

Hi All, Just to update: this problem is solved. below are the details: Put Internet driver in path Run Browser Hub for remote exectution java -Dwebdriver.server.session.timeout=0 -jar selenium-server-standalone-2.25.0.jar -role hub java -Dwebdriver.server.session.timeout=0 -jar selenium-server-standalone-2.25.0.jar -role node -hublocalhost:4444/grid/register Refer following links: code.google.com/p/selenium/wiki/Grid2code.google.com/p/selenium/wiki/RemoteWebDrivercode.google.com/p/selenium/wiki/WebDriverJs

 

参考二:https://gist.github.com/djangofan/5174433(已经写好了slave机器的配置信息)

hub设置脚本:

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
TITLE WebDriver Grid Hub on 4444
 
ECHO *********************************************
ECHO *
ECHO * WebDriver grid Hub instance.
ECHO *
ECHO *  http://localhost:4444/grid/console
ECHO *
ECHO *********************************************
ECHO.
 
SET JAR=selenium-server-standalone-2.31.0.jar
SET "WGET=C:\Program Files (x86)\GnuWin32\bin\wget.exe"
 
IF NOT DEFINED JAVA_HOME (
  ECHO You must define a JAVA_HOME environment variable before you run this script.
  GOTO :ERROR
)
SET "PATH=%JAVA_HOME%\bin;%PATH%"
 
IF NOT EXIST %JAR% (
  ECHO Selenium standalone server .jar is missing.
  IF EXIST "%WGET%" (
    ECHO Hit any key to download Selenium standalone .jar file.
  PAUSE >nul
    "%WGET%" --dot-style=binary http://selenium.googlecode.com/files/%JAR%
  ) ELSE (
    ECHO Wget.exe is missing. Install GNU Utils.
    GOTO :ERROR
  )
)
ECHO.
 
java.exe -jar %JAR% -role hub -hubConfig hubConfig.json -debug
IF NOT %ERRORLEVEL%==0 GOTO :ERROR
 
GOTO :END
:ERROR
ECHO There may have been an error.  Try running the script again.
pause
:END

 

grid node设置脚本:

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
SET TITLETEXT=WebDriver Grid Node
TITLE %TITLETEXT%
 
SET CHROMEDRIVERZIP=chromedriver_win_26.0.1383.0.zip
SET CHROMEDRIVER=chromedriver.exe
SET JAR=selenium-server-standalone-2.31.0.jar
SET IEDRIVERZIP=IEDriverServer_Win32_2.31.0.zip
SET IEDRIVER=IEDriverServer.exe
SET "WGET=C:\Program Files (x86)\GnuWin32\bin\wget.exe"
 
ECHO *********************************************
ECHO *
ECHO * WebDriver Grid Node
ECHO * It requires that a WebDriver JSON Hub is already running, usually on port 4444.
ECHO * You can run more than one of these if each has its own JSON config file.
ECHO *
ECHO *********************************************
ECHO.
 
IF NOT DEFINED JAVA_HOME (
ECHO You must define a JAVA_HOME environment variable before you run this script.
GOTO :ERROR
)
SET "PATH=.;%JAVA_HOME%\bin;%PATH%"
 
IF NOT EXIST %JAR% (
IF EXIST "%WGET%" (
"%WGET%" --dot-style=binary http://selenium.googlecode.com/files/%JAR%
) ELSE (
ECHO Wget.exe is missing. Install GNU utils. & GOTO :ERROR
)
)
 
IF NOT EXIST %IEDRIVER% (
IF EXIST "%WGET%" (
"%WGET%" --dot-style=binary http://selenium.googlecode.com/files/%IEDRIVERZIP%
jar.exe xvf %IEDRIVERZIP%
DEL /Q %IEDRIVERZIP%
) ELSE (
ECHO Wget.exe is missing. & GOTO :ERROR
)
)
 
IF NOT EXIST %CHROMEDRIVER% (
IF EXIST "%WGET%" (
"%WGET%" --dot-style=binary --no-check-certificate https://chromedriver.googlecode.com/files/%CHROMEDRIVERZIP%
jar.exe xvf %CHROMEDRIVERZIP%
DEL /Q %CHROMEDRIVERZIP%
) ELSE (
ECHO Wget.exe is missing. & GOTO :ERROR
)
)
 
ECHO.
ECHO ======================
ECHO Grid Hub status : & netstat -an | FIND "4444"
ECHO ======================
ECHO.
 
TITLE %TITLETEXT%
java.exe -jar %JAR% -role node -nodeConfig node1Config.json -Dwebdriver.chrome.driver=%CHROMEDRIVER%
 
GOTO :END
:ERROR
pause
:END

Stop Hub 节点的脚本:

https://groups.google.com/forum/#!topic/selenium-users/_8A3q_ekw0g

尝试这下面的另外两种方法:

http://localhost:4444/selenium-server/driver?cmd=getLogMessages (Error 500 java.lang.NullPointerException)

http://localhost:4444/lifecycle-manager?action=shutdown (Does nothing)



本文转自hcy's workbench博客园博客,原文链接:http://www.cnblogs.com/alterhu/p/3210906.html ,如需转载请自行联系原作者。

目录
相关文章
|
Web App开发
Python+selenium 技术篇-浏览器后台运行
Python+selenium 技术篇-浏览器后台运行
767 0
|
2月前
|
JavaScript 前端开发 测试技术
Selenium2Library实现基于GUI的测试
Selenium2Library实现基于GUI的测试
36 0
google浏览器截图工具 Open Screenshot(代码截图)
  有的时候特别想把自己写的代码保存为图片,但是代码的内容很长,用普通的截图工具只能一次一次的拼接起来,太麻烦了。这里使用了Google的截图插件,很好用。     或者使用360极速浏览器-->保存网页也为图片,效果也不错。
1218 0
|
前端开发 JavaScript 编解码
浏览器对象模型BOM(Browser Object Model)
1、结构 BOM是Browser Object Model的缩写,简称浏览器对象模型 BOM提供了独立于内容而与浏览器窗口进行交互的对象 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性 BOM缺乏...
1068 0
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
97 5