如何通过Jenkins和Headless浏览器在虚拟服务器空间中运行Selenium Webdriver测试用例(Maven Project)?

时间:2015-01-07 06:56:22

标签: jenkins selenium-webdriver maven-2 jenkins-plugins xvfb

我有一个基于maven的项目。它使用mvn clean install exec:java命令在本地计算机上正确运行。

这是我Pom.xml运行maven项目。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>AutomationMaven</groupId>
    <artifactId>AutomationMaven</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>AutomationMaven</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.43.1</version>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.8</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.4</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-server</artifactId>
            <version>2.43.1</version>
        </dependency>
    </dependencies>
    <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                     <configuration>
                             <source>1.7</source>
                             <target>1.7</target>
                             <encoding>${project.build.sourceEncoding}</encoding>
                             <showDeprecation>true</showDeprecation>
                             <showWarnings>true</showWarnings>
                             <executable>${env.JAVA_HOME}/bin/javac</executable>
                             <fork>true</fork>
                     </configuration>
                </plugin>
                <plugin>  
                       <groupId>org.codehaus.mojo</groupId>  
                       <artifactId>exec-maven-plugin</artifactId>  
                       <version>1.2.1</version>  
                       <configuration>  
                          <mainClass>com.mainClass</mainClass>  
                       </configuration>  
                 </plugin>  
         </plugins>
    </pluginManagement>
    </build>
</project>

我已经为它设置了“GIT存储库”,它与“Jenkins Job”对齐。

我使用此参数在“Jenkins”中完成了工作 - JDK 7 - Xvfb设置(需要有关配置的更多信息) - maven command = mvn clean install exec:java

我为Run Maven Project(Selenium Test)提供了不同的服务器。

我在服务器上运行项目时跟踪跟踪跟踪(错误):

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"mcHeaderLink"}
Command duration or timeout: 30.03 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83c88998168a363a0', time: '2014-09-10 09:43:55'
System info: host: 'ip-10-120-0-202', ip: '10.120.0.202', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-58-virtual', java.version: '1.7.0_72'
Session ID: 6c37455f-1dbe-4a8f-acd4-a2b21ae6ec00
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=26.0}]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393)
    at org.openqa.selenium.By$ById.findElement(By.java:214)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)
    at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:59)
    at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:37)
    at com.sun.proxy.$Proxy22.click(Unknown Source) 

2 个答案:

答案 0 :(得分:1)

很难说为什么它不起作用,因为你对你的申请一无所知。但是&#34; NoSuchElementException&#34;表明测试正在运行,并且无法找到所需的元素。

查看您的应用程序日志文件并检查它是否真的在运行。

如果出现错误,您可以转储屏幕截图以查看应用程序状态。 见Take a screenshot with Selenium WebDriver

答案 1 :(得分:1)

还有另一种方法可以帮助你。

但是您需要专用的服务器空间和用于运行selenium脚本的显示器。 javascript操作需要显示。

您必须首先使用您的存储库配置jenkins作业。

获得存储库后,必须在mvn exec:java。

的帮助下运行该项目

请使用maven-compiler-plugin在jenkins中确认您的JRE版本。它应该是一样的。

一旦您能够成功运行jenkins作业,就可以在jenkins控制台日志中查看它。