junit 和 运行 来自命令行的 selenium 测试

junit and running a selenium test from command line

做了一个噩梦,用 Scirocco 录制了一个宏只是为了测试 Selenium,现在我已经想不出如何 运行 它了。

为了设法编译代码,我使用 -classpath .:/usr/share/junit4/lib/junit.jar:/usr/local/share/selenium-2.45.0/selenium-java-2.45.0.jar

这似乎加载了所有需要的并编译。 自己的测试脚本:

import java.util.concurrent.TimeUnit;
import junit.framework.TestCase;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test1 extends TestCase {
  private WebDriver driver;
    private String baseUrl;

        @Before
          public void setUp() throws Exception {
              // Download chromedriver (http://code.google.com/p/chromedriver/downloads/list)
              System.setProperty("webdriver.chrome.driver", "/usr/sbin/chromedriver");
              driver = new ChromeDriver();
              baseUrl = "https://www.google.co.uk/?gfe_rd=cr&ei=E4syVcSOK-jN7AbK0YH4Dg&gws_rd=ssl#q=Bengt+Bjorkberg";
              driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
          }

          @Test
          public void test() throws Exception {
               driver.get(baseUrl + "/");
               driver.findElement(By.name("btnG")).click();
               driver.findElement(By.linkText("Ben Bjorkberg | LinkedIn")).click();
               driver.findElement(By.linkText("View Ben's Full Profile")).click();
               driver.findElement(By.linkText("View Ben's Full Profile")).click();
          }

          @After
          public void tearDown() throws Exception {
                driver.quit();
          }
}

编译得很好,理论上应该可以。

然后我创建以下测试 运行ner:

package de.vogella.junit.first;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;


public class MyTestRunner {
  public static void main(String[] args) {
      Result result = JUnitCore.runClasses(Test1.class);
        for (Failure failure : result.getFailures()) {
                System.out.println(failure.toString());
        }
     }

但是如果我运行

javac -classpath .:/usr/share/junit4/lib/junit.jar:/usr/local/share/selenium-2.45.0/selenium-java-2.45.0.jar MyTestRunner.java 

此时我得到

MyTestRunner.java:10: error: cannot find symbol
      Result result = JUnitCore.runClasses(Test1.class);
                                           ^
  symbol:   class Test1
  location: class MyTestRunner
1 error

有什么建议吗?

我建议使用 standard directory layout 在 Eclipse 或 IntelliJ 等 IDE 中进行开发。 IDE 会捕获多种问题。

我的猜测是 Test1 没有包声明,所以它在默认包中。由于 MyTestRunner 不在默认包中,因此会出现编译错误。 IDE 会立即告诉您这种问题。

一旦您准备好在命令行上构建,我将使用 Maven 或 Gradle 等构建工具。

您的代码存在一些小问题:

  • MyTestRunner 看起来很像 JUnitCore,只是它将测试内容硬编码到 运行。同样,我建议使用构建工具。您可以轻松地将 Maven 或 Gradle 配置为 运行 src/test/java 下的所有测试,如果测试失败,它们将打印出漂亮的堆栈跟踪。它们都使用持续集成工具(JUnit 本身使用 http://cloudbees.com)。如果你真的想要自己的 运行ner,你应该委托给 JUnitCore.main()
  • JUnit4 风格的测试(即使用 @Test@Before 等注释的测试)不应直接或间接扩展 junit.framework.TestCase。事实上,您的 JUnit4 样式测试不应引用 junit.framework 包中的任何 类。