黄瓜生成空白的HTML报告

问题描述 投票:2回答:2

黄瓜版本:1.2.5

特色:

@SSS

Feature: Login

  Scenario: Login And Logout

    * UI Login with user "moaada" and password "moaada12"
    * UI Logout

我正在使用junit运行一个功能文件:

@RunWith(Cucumber.class)
@CucumberOptions(
        format = {"pretty", "html:target/cucumber", "json:target/cucumber.json"},
        glue = {"com.webuiauto.bddtests"},
        features = {"src/test/resources/Features"},
        strict = true,
        tags = {"@SSS"})
public class RunViBddTests {
}

在浏览器中打开index.html文件后,我什么都没看到;只是一个空白页面。我在浏览器上检查过,我在控制台中收到以下错误:

formatter.js:112 Uncaught TypeError: Cannot read property 'append' of undefined
    at CucumberHTML.DOMFormatter.write (formatter.js:112)
    at HTMLDocument.<anonymous> (report.js:15)
    at k (jquery-1.8.2.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-1.8.2.min.js:2)
    at Function.ready (jquery-1.8.2.min.js:2)
    at HTMLDocument.D (jquery-1.8.2.min.js:2)
javascript java selenium-webdriver automation cucumber-jvm
2个回答
1
投票

正如brasmusson(https://github.com/cucumber/cucumber-jvm/issues/1303)所回答

“在钩子的Scenario参数上调用write将在report.js文件中添加一个formatter.write调用.https://github.com/cucumber/cucumber-html的javascripts函数将在前一步骤下面显示formatter.write调用的内容。由于没有执行任何前面的步骤,因此没有任何前面的步骤,因此从那时起报告将是空白的(对于后续场景的钩子之前的formatter.write调用,将显示内容在上一个场景的最后一步之下,这是不正确的,但报告至少不会是空白的)。

要解决此问题,需要更新https://github.com/cucumber/cucumber-html项目。但是,由于计划是取代该项目,请参阅cucumber / cucumber-html#44,我不确定核心团队中的任何人是否会接受这项工作。

解决方法是,如果使用html-formatter,则不要在挂钩前的Scenario参数上调用write。“


0
投票

这就是我想出来的:

黄瓜报告会生成一些js文件,问题出在report.js中

这是它的样子:

$(document).ready(function() {var formatter = new CucumberHTML.DOMFormatter($('.cucumber-report'));formatter.uri("test.feature");
    formatter.feature({
      "line": 3,
      "name": "Login",
      "description": "",
      "id": "login",
      "keyword": "Feature",
      "tags": [
        {
          "line": 1,
          "name": "@SSS"
        }
      ]
    });
    **formatter.write("11:43:49: WebDriver navigating to:\u0027https://1.1.1.1/\u0027");**
    formatter.before({
      "duration": 16696372480,
      "status": "passed"
    });
    formatter.before({
      "duration": 93668,
      "status": "passed"
    });
    formatter.scenario({
      "line": 5,
      "name": "Login And Logout",
      "description": "",
      "id": "login;login-and-logout",
      "type": "scenario",
      "keyword": "Scenario"
    });
    formatter.step({
      "line": 7,
      "name": "UI Login with user \"moaada\" and password \"moaada12\"",
      "keyword": "* "
    });
    formatter.step({
      "line": 8,
      "name": "UI Logout",
      "keyword": "* "
    });
    formatter.match({
      "arguments": [
        {
          "val": "moaada",
          "offset": 20
        },
        {
          "val": "moaada12",
          "offset": 42
        }
      ],
      "location": "BasicOperationsSteps.login(String,String)"
    });
    formatter.write("11:43:59: Finding web element By.id: gwt-debug-Dialog_Box");
    formatter.write("11:43:59: Web element found By.id: gwt-debug-Dialog_Box");
    formatter.write("11:43:59: Finding web element By.id: gwt-debug-Login_UserName");
    formatter.write("11:43:59: Web element found By.id: gwt-debug-Login_UserName");
    formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_UserName from \u0027\u0027 to \u0027\u0027");
    formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_UserName from \u0027\u0027 to \u0027moaada\u0027");
    formatter.write("11:43:59: Finding web element By.id: gwt-debug-Dialog_Box");
    formatter.write("11:43:59: Web element found By.id: gwt-debug-Dialog_Box");
    formatter.write("11:43:59: Finding web element By.id: gwt-debug-Login_Password");
    formatter.write("11:43:59: Web element found By.id: gwt-debug-Login_Password");
    formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_Password from \u0027\u0027 to \u0027\u0027");
    formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_Password from \u0027\u0027 to \u0027moaada12\u0027");
    formatter.write("11:43:59: Finding web element By.id: gwt-debug-userInfo");
    formatter.write("11:43:59: Web element found By.id: gwt-debug-userInfo");
    formatter.write("11:44:00: Finding web element By.id: gwt-debug-userInfo");
    formatter.write("11:44:00: Web element found By.id: gwt-debug-userInfo");
    formatter.write("11:44:00: Finding web element By.id: gwt-debug-DeviceControlBar_Help");
    formatter.write("11:44:00: Web element found By.id: gwt-debug-DeviceControlBar_Help");
    formatter.embedding("image/png", "embedded0.png");
    formatter.write("11:44:01: 11:44:00 Screenshot. Locator: By.id: gwt-debug-userInfo");
    formatter.result({
      "duration": 3237037562,
      "status": "passed"
    });
    formatter.match({
      "location": "BasicOperationsSteps.logout()"
    });
    formatter.write("11:44:02: Finding web element By.id: gwt-debug-userInfo");
    formatter.write("11:44:02: Web element found By.id: gwt-debug-userInfo");
    formatter.write("11:44:02: Clicking on td");
    formatter.write("11:44:02: Finding web element By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.write("11:44:02: Web element found By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.write("11:44:02: Finding web element By.id: gwt-debug-Global_Logout-0-0");
    formatter.write("11:44:02: Web element found By.id: gwt-debug-Global_Logout-0-0");
    formatter.write("11:44:02: Clicking on td");
    formatter.write("11:44:02: Finding web element By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.write("11:44:02: Web element found By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.embedding("image/png", "embedded1.png");
    formatter.write("11:44:03: 11:44:02 Screenshot. Locator: By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.write("11:44:03: Finding web element By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.write("11:44:12: Web element found By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.embedding("image/png", "embedded2.png");
    formatter.write("11:44:12: 11:44:12 Screenshot. Locator: By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
    formatter.result({
      "duration": 13063106597,
      "status": "passed"
    });
    formatter.after({
      "duration": 173543,
      "status": "passed"
    });
    formatter.after({
      "duration": 45551,
      "status": "passed"
    });
    });

我走了这条线:formatter.write("11:43:49: WebDriver navigating to:\u0027https://1.1.1.1/\u0027");

并在第二个formatter.write之前把它放好

所以文件是这样的:

$(document).ready(function() {var formatter = new CucumberHTML.DOMFormatter($('.cucumber-report'));formatter.uri("test.feature");
formatter.feature({
  "line": 3,
  "name": "Login",
  "description": "",
  "id": "login",
  "keyword": "Feature",
  "tags": [
    {
      "line": 1,
      "name": "@SSS"
    }
  ]
});

formatter.before({
  "duration": 16696372480,
  "status": "passed"
});
formatter.before({
  "duration": 93668,
  "status": "passed"
});
formatter.scenario({
  "line": 5,
  "name": "Login And Logout",
  "description": "",
  "id": "login;login-and-logout",
  "type": "scenario",
  "keyword": "Scenario"
});
formatter.step({
  "line": 7,
  "name": "UI Login with user \"moaada\" and password \"moaada12\"",
  "keyword": "* "
});
formatter.step({
  "line": 8,
  "name": "UI Logout",
  "keyword": "* "
});
formatter.match({
  "arguments": [
    {
      "val": "moaada",
      "offset": 20
    },
    {
      "val": "moaada12",
      "offset": 42
    }
  ],
  "location": "BasicOperationsSteps.login(String,String)"
});
**formatter.write("11:43:49: WebDriver navigating to:\u0027https://1.1.1.1/\u0027");**
formatter.write("11:43:59: Finding web element By.id: gwt-debug-Dialog_Box");
formatter.write("11:43:59: Web element found By.id: gwt-debug-Dialog_Box");
formatter.write("11:43:59: Finding web element By.id: gwt-debug-Login_UserName");
formatter.write("11:43:59: Web element found By.id: gwt-debug-Login_UserName");
formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_UserName from \u0027\u0027 to \u0027\u0027");
formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_UserName from \u0027\u0027 to \u0027moaada\u0027");
formatter.write("11:43:59: Finding web element By.id: gwt-debug-Dialog_Box");
formatter.write("11:43:59: Web element found By.id: gwt-debug-Dialog_Box");
formatter.write("11:43:59: Finding web element By.id: gwt-debug-Login_Password");
formatter.write("11:43:59: Web element found By.id: gwt-debug-Login_Password");
formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_Password from \u0027\u0027 to \u0027\u0027");
formatter.write("11:43:59: WebDriver changing value in element found By.id: gwt-debug-Login_Password from \u0027\u0027 to \u0027moaada12\u0027");
formatter.write("11:43:59: Finding web element By.id: gwt-debug-userInfo");
formatter.write("11:43:59: Web element found By.id: gwt-debug-userInfo");
formatter.write("11:44:00: Finding web element By.id: gwt-debug-userInfo");
formatter.write("11:44:00: Web element found By.id: gwt-debug-userInfo");
formatter.write("11:44:00: Finding web element By.id: gwt-debug-DeviceControlBar_Help");
formatter.write("11:44:00: Web element found By.id: gwt-debug-DeviceControlBar_Help");
formatter.embedding("image/png", "embedded0.png");
formatter.write("11:44:01: 11:44:00 Screenshot. Locator: By.id: gwt-debug-userInfo");
formatter.result({
  "duration": 3237037562,
  "status": "passed"
});
formatter.match({
  "location": "BasicOperationsSteps.logout()"
});
formatter.write("11:44:02: Finding web element By.id: gwt-debug-userInfo");
formatter.write("11:44:02: Web element found By.id: gwt-debug-userInfo");
formatter.write("11:44:02: Clicking on td");
formatter.write("11:44:02: Finding web element By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.write("11:44:02: Web element found By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.write("11:44:02: Finding web element By.id: gwt-debug-Global_Logout-0-0");
formatter.write("11:44:02: Web element found By.id: gwt-debug-Global_Logout-0-0");
formatter.write("11:44:02: Clicking on td");
formatter.write("11:44:02: Finding web element By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.write("11:44:02: Web element found By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.embedding("image/png", "embedded1.png");
formatter.write("11:44:03: 11:44:02 Screenshot. Locator: By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.write("11:44:03: Finding web element By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.write("11:44:12: Web element found By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.embedding("image/png", "embedded2.png");
formatter.write("11:44:12: 11:44:12 Screenshot. Locator: By.xpath: .//div[contains(@id,\u0027gwt-debug-Dialog_Box\u0027) and contains(@class,\u0027MessagesFrame\u0027)]");
formatter.result({
  "duration": 13063106597,
  "status": "passed"
});
formatter.after({
  "duration": 173543,
  "status": "passed"
});
formatter.after({
  "duration": 45551,
  "status": "passed"
});
});

这是黄瓜的虫子吗?

© www.soinside.com 2019 - 2024. All rights reserved.