cucumber-jvm与html格式化程序生成空白页

时间:2012-06-22 15:57:42

标签: html cucumber formatter cucumber-jvm

greeng-jvm的HTML格式化程序昨天正在为我工​​作。今天,当我运行测试时,我在index.html中获得了以下内容。所有其他支持文件(style.css,formatter.js等)都在那里:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Cucumber Features</title>
    <link href="style.css" rel="stylesheet">
    <script src="jquery-1.6.4.min.js"></script>
    <script src="formatter.js"></script>
    <script src="report.js"></script>
  </head>
  <body>
    <div class="cucumber-report"></div>
  </body>
</html>

report.js文件包含我刚刚运行的测试的正确内容,但是当我调出index.html文件时浏览器呈现一个空白页面。我正在运行一个简单的测试,只是为了让所有东西都连线。我的测试类看起来像这样:

import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;

@RunWith(Cucumber.class)
@Cucumber.Options(format = {"html:build/reports/tests/cucumber"})
public class BasicUITest {
}

正如我所说,我的测试运行良好。我可以看到junit xml输出并且它是正确的(除了它实际上没有将失败的测试注册为失败的事实 - 但这是另一个问题)。

我可以对配置做些什么,以便不再将内容放入html文件中?

为了完整性,这是我的步骤定义文件:

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.SeleneseTestBase;

import cucumber.annotation.After;
import cucumber.annotation.Before;
import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;

public class StepDefinitions extends SeleneseTestBase {

    @Before
    public void initSelenium() throws Exception {
        selenium = new DefaultSelenium("localhost", 5555, "*firefox", "http://localhost:8080/");
        selenium.start();
    }

    @After
    public void stopSelenium() throws Exception {
        selenium.stop();
    }

    @Given("^I login as \"([^\"]*)\" with password \"([^\"]*)\"$")
    public void login(String user, String password) {
        selenium.open("/web/guest/real-login?p_p_state=maximized&p_p_mode=view&saveLastPath=0&_58_struts_action=%2Flogin%2Flogin&p_p_id=58&p_p_lifecycle=0&_58_redirect=http%3A%2F%2Flocalhost%3A8080%2Fc");
        selenium.waitForPageToLoad("30000");
        selenium.type("id=_58_login", user);
        selenium.type("id=_58_password", password);
        selenium.click("css=input.small");
        selenium.waitForPageToLoad("30000");
        selenium.click("css=input.highlight");
        selenium.waitForPageToLoad("30000");
    }

    @Given("^I login as the \"([^\"]*)\" user$")
    public void loginAsUser(String user) {
        if (user.equalsIgnoreCase("msv admin")) {
            login(TestData.getAdminUserEmail(), TestData.getSharedPassword());
        } else if (user.equalsIgnoreCase("msv regular")) {
            login(TestData.getRegularUserEmail(), TestData.getSharedPassword());
        } else if (user.equalsIgnoreCase("msv executer")) {
            login(TestData.getExecuterUserEmail(), TestData.getSharedPassword());
        }
    }

    @Then("^I go to the MSV App page$")
    public void gotoMSVPage() {
        selenium.click("link=" + TestData.getCommunityPageName());
        selenium.waitForPageToLoad("30000");
    }

    @Then("^I logout$")
    public void logout() {
        selenium.click("link=Sign Out");
        selenium.waitForPageToLoad("30000");
    }

    @Then("^I should see \"([^\"]*)\"$")
    public void shouldSee(String value) {
        verifyTrue(selenium.isTextPresent(value));
        checkForVerificationErrors();
    }

    @Then("^I should not see \"([^\"]*)\"$")
    public void shouldNotSee(String value) {
        verifyFalse(selenium.isTextPresent(value));
        checkForVerificationErrors();
    }

}

我正在通过gradle 1.0运行它,如果这有所不同(我不这么认为,因为它昨天正在工作)。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

好的,由于萤火虫,我发现了什么错误。

Cucumber-jvm自动查找与相应java文件同名的要素文件。对我来说,这就像是:

com.nowhere.myapp.uat.BasicUITest

使用相应的功能文件:

/src/test/resources/com/nowhere/myapp/uat/BasicUITest.feature

当cucumber生成report.js文件时,它会通过以下调用指向功能文件:

formatter.uri('com\nowhere\myapp\uat\BasicUITest.feature');

要素文件位置字符串不是有效的URI,因此会导致出现在firebug控制台中的浏览器错误。错误是“\ u”是URI中的转义序列。要吸取的教训:

请勿使用包含以字母“u”开头的任何组件的软件包名称,因为这会导致浏览器中出现格式错误的URI异常。