Исключение огурца Не удалось создать каталог - PullRequest
0 голосов
/ 23 ноября 2018

Когда я запускаю класс MainRunner в ответ, я получаю сообщение об ошибке в консоли, как показано ниже.Я установил разрешения для папки.

enter image description here

Вот мой класс шагов:

package CucumberFramework.steps;

import cucumber.api.java.en.Given;

import cucumber.api.java.en.Then;

import cucumber.api.java.en.When;



public class LoginSteps {

@Given("^User navigate to stackoverflow webstie$")

public void user_navigate_to_stackoverflow_webstie() throws Throwable {

   System.out.println("user_navigate_to_stackoverflow_webstie");

}



@Given("^User clicks on the login button$")

public void user_clicks_on_the_login_button() throws Throwable {

    System.out.println("user_clicks_on_the_login_button");

}



@Given("^User enters valid username$")

public void user_enters_valid_username() throws Throwable {

System.out.println("user_enters_valid_username");

}



@Given("^User enters valid password$")

public void user_enters_valid_password() throws Throwable {

System.out.println("user_enters_valid_password");

}

@When("^User clicks again on the login button$")

public void user_clicks_again_on_the_login_button() throws Throwable {

System.out.println("user_clicks_again_on_the_login_button");

}



@Then("^User should be taken to the sucsfull login page$")

public void user_should_be_taken_to_the_sucsfull_login_page() throws Throwable {

System.out.println("user_should_be_taken_to_the_sucsfull_login_page");

}

@Given("^User navigate to stackoverflow webstie(\\d+)$")

public void user_navigate_to_stackoverflow_webstie2(int arg1) throws Throwable {

System.out.println("user_navigate_to_stackoverflow_webstie2");

}



@Given("^User clicks on the login button(\\d+)$")

public void user_clicks_on_the_login_button2(int arg1) throws Throwable {

System.out.println("user_clicks_on_the_login_button2");

}



@Given("^User enters valid username(\\d+)$")

public void user_enters_valid_username2(int arg1) throws Throwable {

System.out.println("user_enters_valid_username2");

}



@Given("^User enters valid password(\\d+)$")

public void user_enters_valid_password2(int arg1) throws Throwable {

System.out.println("user_enters_valid_password2");

}



@When("^User clicks again on the login button(\\d+)$")

public void user_clicks_again_on_the_login_button2(int arg1) throws Throwable {

System.out.println("user_clicks_again_on_the_login_button2");

}



@Then("^User should be taken to the sucsfull login page(\\d+)$")

public void user_should_be_taken_to_the_sucsfull_login_page2(int arg1) throws Throwable {

System.out.println("user_should_be_taken_to_the_sucsfull_login_page2");

}

}

Я также посмотрел разрешения дляцелевую папку и гарантированные разрешения предоставляется всем пользователям.Я на Windows 10 Pro.Я также пытаюсь запустить Eclipse в режиме администратора, который также не помог.

Это мой Pom.xml https://pastebin.com/ad2qyGRH

Я также попробовал следующее:

работает: Eclipse menu Project> Clean ...

enter image description here

Но радости нет.Кто-нибудь знает, что может быть причиной этого, пожалуйста?

С уважением

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Из того, что я нашел, кажется, что объект plugin пытается создать 2 директории с именем "огурец", когда вы хотите, чтобы объект создал каталог и файл с именем огурец,Вот как выглядит ваш объект:

plugin = {
    "pretty", 
    "html:target/cucumber", //this is telling cucumber to create a folder called cucumber
    "json:target/cucumber", //this is also telling cucumber to create a folder called cucumber 
                            //even though you just need a file called cucumber.json
    "com.cucumber.listener.ExtentCucumberFormatter: target/report.html" 
    //there is an unnecessary white space before "target" that is causing another issue
}

То, что вы пытаетесь сделать, это:

plugin = {
    "pretty", 
    "html:target/cucumber", //create a folder called cucumber
    "json:target/cucumber.json", 
    //Notice the corresponding file extension (.json) telling cucumber to create a file
    "com.cucumber.listener.ExtentCucumberFormatter:target/report.html"
    //Notice I remove the white space at :target/report.html
}

Теперь код создает одну папку называется cucumber (он будет содержать основную веб-страницу с результатами теста) и файл с именем cucumber.json (это будут те же результаты теста, но в формате json)

Не забудьте удалить этот пробел! Затем этот пробел создает отдельную папку с именем "target" (начиная с пробела), которая помещает туда файл report.html вместос остальными отчетными артефактами.

Надеюсь, это поможет!

0 голосов
/ 28 ноября 2018

Исключение cucumber.runtime.CucumberException: java.io.IOException: Failed to create directory ... возникает, когда файл с именем выходного каталога (target/cucumber) уже существует.

Предполагается следующая структура

src/test/java/runner/TestRunner.java
pom.xml

pom.xml зависимости

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <version.cucumber>2.0.0</version.cucumber>
</properties>
<dependencies>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${version.cucumber}</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${version.cucumber}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

TestRunner.java

package runner;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(plugin = { "html:target/cucumber" })
public class TestRunner {
}

шаги для воспроизведения

$ mvn clean test-compile
$ echo "some text" > target/cucumber

сейчас в виде файла target/cucumber существует, запустите тест

$ mvn test

с ошибкой

Caused by: cucumber.runtime.CucumberException: java.io.IOException: Failed to create directory /tmp/cuke.test/target/cucumber
    at cucumber.runtime.formatter.HTMLFormatter.createReportFileOutputStream(HTMLFormatter.java:520)
    at cucumber.runtime.formatter.HTMLFormatter.createJsOut(HTMLFormatter.java:510)
    at cucumber.runtime.formatter.HTMLFormatter.<init>(HTMLFormatter.java:123)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

На основе номеров строк в приведенной выше трассировке стека и на снимке экрана с OP.Похоже, что OP использует версию Cucumber 2.0.0-SNAPSHOT.Поскольку метод reportFileOutputStream был переименован в классе HTMLFormatter в createReportFileOutputStream (SHA1: 486b82cb9 ).Это было до выхода версии Cucumber 2.0.0.

edit: Некоторое более подробное объяснение.Основная проблема заключается в том, что плагины пытаются создать запись каталога с таким же именем target/cucumber.

  • html - создаст каталог target/cucumber
  • json - создаст файл target/cucumber

Как упоминалось выше, выдается исключение Failed to create directory, когда должен быть создан каталог, а файл с таким же уже существует.

Может воспроизводиться со следующими CucumberOptions в TestRunner.java.

@CucumberOptions(plugin = {"json:target/cucumber", "html:target/cucumber"})
cucumber.runtime.CucumberException: cucumber.runtime.CucumberException: \
    java.io.IOException: Failed to create directory /.../target/cucumber

Примечание: В коде OP порядок подключаемых модулей не json - html это html - json.Следовательно, в приведенном выше фрагменте кода использовался только плагин html, и перед запуском теста был создан файл target/cucumber.

Использование плагинов в том же порядке, как показано на скриншоте OP, вызывает другое исключение.

@CucumberOptions(plugin = {"html:target/cucumber", "json:target/cucumber"})
cucumber.runtime.CucumberException: java.io.FileNotFoundException: \
    target/cucumber (Is a directory)

На основании шагов, использованных для воспроизведения коллизии, порядок плагинов и исключение на скриншоте не совпадают.

Скорее всего, при изменении имени выходного файла плагина json ("json:target/cucumber.json") произойдетрешить вопрос.

...