【问题标题】:My selenium tests aren't running from either cmd or Jenkins when executed via testng Framework. Results: Total tests run: 0, Failures: 0, Skips: 0通过 testng 框架执行时,我的 selenium 测试没有从 cmd 或 Jenkins 运行。结果:总测试运行:0,失败:0,跳过:0
【发布时间】:2018-03-08 12:24:06
【问题描述】:

Selenium 和自动化的新手。

首先,当我使用 Junit 运行测试时,我的测试在 Eclipse 中运行良好。但是如果我通过 Jenkins 或 CLI 开始测试,我会得到结果:Total tests run: 0, Failures: 0, Skips: 0

现在我可能弄错了测试的结构,或者我可能做错了什么。我查遍了所有在线解决方案似乎都无法解决我的问题。

我的测试只是一个简单的登录测试而已。

我认为我可能将框架混合在一起或以错误的方式将它们一起使用。我正在使用 Testng 开始我的硒测试我认为。我再次举手并承认我是新手,所以我希望有人能告诉我哪里出错了。我确实注意到在我的实际 selenium 测试文件中我没有使用任何 Testng 函数或任何东西,而只是 selenium web 驱动程序。我在下面列出了我的代码文件以及我从测试中获得的结果。

再次抱歉,如果我遗漏了一个简单的步骤,或者我正在尝试一些不可能的事情,我只需要专家的帮助或正确方向的指示。感谢您提前提供任何帮助。

测试

出于安全原因,我删除了实际 URL 和凭据。

    package testing;

    import static org.junit.Assert.fail;

    import java.util.concurrent.TimeUnit;

    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.openqa.selenium.Alert;
    import org.openqa.selenium.By;
    import org.openqa.selenium.NoAlertPresentException;
    import org.openqa.selenium.NoSuchElementException;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;

    import org.testng.Assert;



    public class login {
      private WebDriver driver;
      private String baseUrl;
      private boolean acceptNextAlert = true;
      private StringBuffer verificationErrors = new StringBuffer();

      @Before
      public void setUp() throws Exception {
        System.setProperty("webdriver.gecko.driver","C:\\gecko\\geckodriver.exe");
        driver = new FirefoxDriver();
        baseUrl = "";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
      }

      @Test
      public void testLogin() throws Exception {
        driver.get(baseUrl + "");
        driver.findElement(By.id("email")).clear();
        d

river.findElement(By.id("email")).sendKeys("");
    driver.findElement(By.id("password")).clear();
    driver.findElement(By.id("password")).sendKeys("");
    driver.findElement(By.xpath("//input[@value='Login »']")).click();
  }

  @After
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}

testng.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Sample Suite">

        <test name="Learning Jenkins">
        <classes>

            <class name="testing.login"></class>

        </classes>

    </test>

</suite> 

CLI 或 Jenkins 测试的结果

[TestNG] Running:
  C:\Users\keating99\workspace\FdimTests\testng.xml


===============================================
Sample Suite
Total tests run: 0, Failures: 0, Skips: 0
===============================================

Finished: SUCCESS

我再次意识到我在实际测试中没有使用任何 Testng,但我测试的目的是启动 selenium 来运行测试。也许我的做法不对。

硒测试有效,我可以从 Eclipse 中启动。

提前感谢您的帮助!

【问题讨论】:

  • testng.xml 包含什么内容?
  • 嗨莫菲克。我添加了 testng.xml。谢谢

标签: java selenium jenkins selenium-webdriver testng


【解决方案1】:

虽然这可能更适合作为评论,但有几件事需要澄清,因为import org.junit.Test, Before, After, etc 表示您已经编写了 JUnit 测试,但您提到了 TestNG,所以这取决于您真正想要做什么:

  • 编写 JUnit 测试并通过 TestNG 执行它们:虽然有点奇怪(我该判断谁?!),但根据 the docs,可以通过确保 JUnit 可用在执行期间在类路径中,并将junit属性设置为true,例如&lt;test name=name="Learning Jenkins" junit="true"&gt;

  • 编写和执行 TestNG 测试:将 JUnit 导入替换为 TestNG counterparts,例如 org.testng.annotations.Test

我再次意识到我在实际测试中没有使用任何 Testng,但我测试的目的是启动 selenium 来运行测试。也许我的做法不对。

目前您使用的是 JUnit,而不是 TestNG :-)。无论如何,使用fail(verificationErrorString),您实际上是在使用它,尽管您的测试可能仅通过验证没有错误消息是不完整的。您应该添加一些断言来检查您加载的页面上存在的任何数据是否正确。你可以浏览TestNG-Selenium quick tutorial,或者你想要的任何其他文档,那里有很多。简而言之,至少应该有一个“良好/完整”的测试(描述here 的良好测试的质量 - 你实际上并不是在编写单元测试,但它仍然适用):

  • 为测试准备所有条件 - 例如,加载和启动驱动程序
  • 调用/访问被测部分 - 例如:加载页面,检索表格内容
  • 验证结果是否正确 - 例如:确保表格包含预期数据
  • 清理,例如回滚修改过的数据(如果有)、关闭连接等 - 例如关闭驱动程序

【讨论】:

  • 感谢 Morfic 的反馈。我希望能够运行我的 WebDriver 测试。我想我在这里走错了路。
  • @TrevorKeating 不是真的,这几乎是要走的路,你只是混合了 JUnit 和 TestNG,所以通过一些小的调整你会很高兴。我发现 TestNG 更灵活,但这是个人喜好,只需使用其中一个使其更简单。我已经更新了我的答案并添加了一个使用 Selenium 和 TestNG 的快速教程链接,但您也可以轻松找到 JUnit 教程。如果您仍有问题,请告诉我。
  • @TrevorKeating 不客气,我做了一个小改动,以更好地解释测试应该做什么/包含什么才能被认为是好的。玩得开心!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多