【问题标题】:How to make Jenkins run my Maven/Selenium GitHub Test如何让 Jenkins 运行我的 Maven/Selenium GitHub 测试
【发布时间】:2014-03-12 13:50:07
【问题描述】:

目前我有一个 GitHub 存储库,其中包含 4 个 Selenium/Maven 测试。我可以通过 mvn test

在我的本地机器上单独运行每个测试

我让 Jenkins 也在我的本地机器上运行,并创建了一个 maven 项目来拉取我的 GitHub 存储库,在其中一个测试 (P_ProfileChangeMavenTest) 中选择 pom.xml,然后执行一个测试作为我的 maven 目标。

当 Jenkins 运行我的测试时,它开始通过我的 maven 项目,但没有启动 Firefox 浏览器与我的测试进行交互。

pom.xml

<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>com.test.profilechange</groupId>
    <artifactId>Profile</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Profile</name>
    <description>PRofile</description>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.39.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire</artifactId>
            <version>2.16</version>
            <type>pom</type>
        </dependency>
    </dependencies>
</project>

我对自动化相当陌生,并试图在发送这些测试以在具有 selenium 网格的服务器上运行之前先验证一切是否在我的本地计算机上正常工作。

我们将不胜感激所有帮助,因为我需要尽快完成这项工作。

提前致谢!

【问题讨论】:

  • 根据您的错误,它说“元素不可见异常”。让我们在谷歌上谈谈。

标签: java maven selenium github jenkins


【解决方案1】:

我发现对我们有用的是使用 testNg 来运行测试。我们创建一个 XML 文件,其中包含我们想要运行的不同测试并使用

mvn test -D testng=testname.xml

TestNG 是一个很好的集成风格测试框架,而 J 单元测试框架更适合单元测试。

xml 文件的示例将是这样的。

    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name=" Report - Create New Report and Add Fields By Double Click and Filter by Right Clicking" parallel="none" verbose="1">
    <test verbose="1" name="is site available" preserve-order="true">
    <classes>
      <class name="com.somecompany.qa.seleniumautomation.PucDD">
        <methods>
          <include name="siteAvailable" />
        </methods>
      </class>
    </classes>
  </test>
  <test verbose="1" name="Login as 'admin' 'password'" preserve-order="true">
    <classes>
      <class name="com.somecompany.qa.seleniumautomation.PucDD">
        <methods>
          <parameter name="login.user" value="admin" />
          <parameter name="login.password" value="password" />
          <include name="login" />
        </methods>
      </class>
    </classes>
  </test>
  <test verbose="1" name="Create a new Report based on the provided data source" preserve-order="true">
    <classes>
      <class name="com.somecompany.qa.seleniumautomation.Reports">
        <methods>
            <parameter name="data.source.name" value="Orders" />    
            <include name="createNewReport"/>
        </methods>
      </class>
    </classes>
  </test>
  <test verbose="1" name="Add the passed fields to the report by double clicking and add the passed filters by right clicking the field." preserve-order="true">
    <classes>
      <class name="com.company.qa.seleniumautomation.Reports">
        <methods>
            <parameter name="login.user" value="admin" />   
            <parameter name="login.password" value="password" />
            <parameter name="fields" value="Customer Number,Customer Name,Order Date,Status,Shipped Date" />
            <parameter name="filterCriteria" value="Customer Number:lte=300,Customer Number:gte=150,Product Lines:contains=a" />
            <include name="addFilters"/>
        </methods>
      </class>
    </classes>
  </test>
  <test verbose="1" name="Close the report" preserve-order="true">
    <classes>
      <class name="com.company.qa.seleniumautomation.Reports">
        <methods>
          <include name="close"/>
        </methods>
      </class>
    </classes>
  </test>
</suite>

【讨论】:

  • 这将要求我完全改变我的项目(我可能会考虑但不想这样做)。我认为我的主要问题是 Jenkins 没有启动 Web 浏览器来运行它的测试
  • @user2683183 您使用的是 Selenium RC 还是 Web 驱动程序?
【解决方案2】:

jenkins 作业在它自己的客户端上运行。它没有可见的 UI,这就是您测试失败的原因。

您应该更改测试代码以使用远程 Webdriver 或 Selenium Grid

//need to start a selenium standalone server
DesiredCapabilities capability = DesiredCapabilities.firefox();
WebDriver driver = new RemoteWebDriver(new URL("http://SERVER_ADDRESS:4444/wd/hub"), capability);

更多详情请参考Selenium Grid Wiki

【讨论】:

    【解决方案3】:

    如果您使用命令行启动 Jenkins,并且如果您运行测试,那么您可以在浏览器上看到正在运行的测试。

    使用命令行启动 Jenkins 的命令: java -jar jenkins.war

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      尝试从命令提示符以管理员身份运行它,对我有用。

      【讨论】:

        【解决方案5】:

        如果您在 Windows 上:

        1).转到命令提示符: 输入“cmd”

        2).按 Ctl+Shift+Enter(以管理员身份打开)

        3).键入“Services.msc”

        4).它将打开 Windows 服务,选择“Jenkins”服务,右键单击并打开属性并转到“登录”选项卡并选择“本地系统帐户”并选择“允许服务与桌面交互” .

        5).按确定。

        6).将打开一个对话框。在“此计算机上运行的程序正在尝试显示消息”窗口中单击“查看消息”。

        现在您可以看到在同一台机器上运行的测试...享受吧!

        【讨论】:

          猜你喜欢
          • 2017-01-04
          • 1970-01-01
          • 2015-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-25
          • 2018-07-08
          • 2020-10-03
          相关资源
          最近更新 更多