Failed to create new instance of class ru.hpsm.selenide_elements.element_imp.table.ResTable. Не удается создать новый экземпляр класса

Почему появляется такая ошибка?

java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at cucumber.runtime.java.DefaultJavaObjectFactory.cacheNewInstance(DefaultJavaObjectFactory.java:41)
    at cucumber.runtime.java.DefaultJavaObjectFactory.getInstance(DefaultJavaObjectFactory.java:33)
    at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:37)
    at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:40)
    at cucumber.api.TestStep.executeStep(TestStep.java:102)
    at cucumber.api.TestStep.run(TestStep.java:83)
    at cucumber.api.TestCase.run(TestCase.java:58)
    at cucumber.runner.Runner.runPickle(Runner.java:80)
    at cucumber.runtime.Runtime.runFeature(Runtime.java:119)
    at cucumber.runtime.Runtime.run(Runtime.java:104)
    at cucumber.api.cli.Main.run(Main.java:36)
    at cucumber.api.cli.Main.main(Main.java:18)
    at ✽.PageAllConfigurationItems > проверить значения в таблице конфигурационных единиц, в строке под номером 1(C:/Users/Семён/IdeaProjects/Hspm/hpsm_em/src/test/java/ru/hpsm/features/stand4me/2036037 Сохранение числа КЕ по фильтру.feature:26)
Caused by: java.lang.RuntimeException: Failed to create new instance of class ru.hpsm.selenide_elements.element_imp.table.ResTable
    at com.codeborne.selenide.Selenide.page(Selenide.java:634)
    at ru.hpsm.steps.AtomicSteps.Checks.table.CheckTableRes.<clinit>(CheckTableRes.java:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at cucumber.runtime.java.DefaultJavaObjectFactory.cacheNewInstance(DefaultJavaObjectFactory.java:41)
    at cucumber.runtime.java.DefaultJavaObjectFactory.getInstance(DefaultJavaObjectFactory.java:33)
    at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:37)
    at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:40)
    at cucumber.api.TestStep.executeStep(TestStep.java:102)
    at cucumber.api.TestStep.run(TestStep.java:83)
    at cucumber.api.TestCase.run(TestCase.java:58)
    at cucumber.runner.Runner.runPickle(Runner.java:80)
    at cucumber.runtime.Runtime.runFeature(Runtime.java:119)
    at cucumber.runtime.Runtime.run(Runtime.java:104)
    at cucumber.api.cli.Main.run(Main.java:36)
    at cucumber.api.cli.Main.main(Main.java:18)
Caused by: java.lang.NoSuchMethodException: ru.hpsm.selenide_elements.element_imp.table.ResTable.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getDeclaredConstructor(Class.java:2178)
    at com.codeborne.selenide.Selenide.page(Selenide.java:630)
    ... 17 more

Вот метод для шага:

package ru.hpsm.steps.AtomicSteps.Checks.table;

import cucumber.api.java.ru.Тогда;
import org.junit.Assert;
import ru.hpsm.selenide_elements.element_imp.table.ResTable;
import ru.hpsm.steps.AbstractSteps;
import ru.hpsm.steps.OldSteps.utils.Time;
import ru.hpsm.utils.Storage;


import java.util.Map;

import static com.codeborne.selenide.Selenide.*;
import static ru.hpsm.steps.AtomicSteps.Storage.StorageUtils.getStorageData;
import static ru.hpsm.steps.OldSteps.TestData.getTestData;


public class CheckTableRes extends AbstractSteps {

     static ResTable tableResult = page(ResTable.class);

    @Тогда(value = "^(.+) > проверить значения в таблице конфигурационных единиц, в строке под номером ()(\\d+)$", timeout = defaultStepTimeout)
    public void проверитьЗначенияТаблицеРезультатов(String page, String text, Integer i, Map<String, String> args) {
        ResTable.Row row = null;
        if (i == null) {
            text = getStorageData(text);
            row = new ResTable(page, true).getRow(text, true);
        } else {
            row = new ResTable(page, true).getRow(i, true);
        }

        printCheckStepDescription("В строке Таблицы результатов с текстом \"" + row.getElementName() + "\" проверить" +
                "присутствие значений: " + args);
        for (Map.Entry entry : args.entrySet()) {
            String headerColumnName = entry.getKey().toString(), //Получаем ключ = Имя колонки таблицы
                    expectedCellValue = getStorageData(entry.getValue().toString()); // Получаем Значение = Ожидаемое значение колонки в строки

            String cellValue = row.getCell(headerColumnName, true).getText();

            //TODO Переделать условие в if после создания класса DataTime!!!
            if (entry.getValue().toString().toLowerCase().startsWith("время") && Storage.get(entry.getValue().toString()) != null) //Если значение начинается с "Время" и есть в Хранилище,
                // то проверяем время с учетом дельты
                Time.checkDeltaTime(expectedCellValue, cellValue, getTestData().delta);
            else { // иначе сравниваем значения как текст
                Assert.assertEquals("Ошибка. В строке Таблицы Результатов \"" + row.getElementName() + "\" в колонке \"" + headerColumnName + "\" не содержится ожидаемое значение \""
                        + expectedCellValue + "\", а содержится \"" + cellValue + "\"", expectedCellValue.trim(), cellValue.trim());
                System.out.println("в строке в колонке \"" + headerColumnName + " присутствует ожидаемое значение \"" + expectedCellValue + "\"");
            }
        }
        printStepResilt("В строке Таблицы результатов с текстом \"" + row.getElementName() + "\"" +
                "содержатся значения: " + args);
    }
}

И сам класс ResTable:

package ru.hpsm.selenide_elements.element_imp.table;


import com.codeborne.selenide.ElementsCollection;
import com.codeborne.selenide.SelenideElement;
import org.openqa.selenium.By;

import ru.hpsm.selenide_elements.element_imp.CommonElementsCollection;
import ru.hpsm.selenide_elements.element_imp.ElementImpl;
import ru.hpsm.utils.Storage;

import java.util.ArrayList;
import java.util.List;

import static com.codeborne.selenide.Selenide.page;
import static org.junit.Assert.assertTrue;
import static ru.hpsm.page_objects.NamedElementsContainer.pageFactory;
import static ru.hpsm.steps.AtomicSteps.Checks.Utils.CheckUtils.checkAlertDoesNotExist;
import static ru.hpsm.steps.AtomicSteps.Storage.StorageUtils.getStorageData;
import static ru.hpsm.steps.WaiterUtils.ожидатьЗагрузкуСтраницыИпроверитьОтсутствиеКрасныхАлертов;
import static ru.hpsm.utils.StringUtils.getRandomValueFromList;


    public class ResTable {
        private final ru.hpsm.page_objects.pages.stand4me.PageAllConfigurationItems resPage = page(ru.hpsm.page_objects.pages.stand4me.PageAllConfigurationItems.class);
        private String context;

        public ResTable(String context, boolean проверитьЧтоТаблицаРезультатовКЕОтображается) {
            this.context = context;
            waitForPageIsUnAvailable();
            if (проверитьЧтоТаблицаРезультатовКЕОтображается) {
                assertTrue("Ошибка. На текущей странице отсутствует Таблица результатов.", isPresent());
            }
        }

        public boolean isPresent() {
            if (resPage.getCollection("Коллекция строк Результаты поиска").get(0).exists())
                return true;
            else
                return false;
        }

        public Row getRow(String value, boolean проверитьЧтоОтображается) { // Конструирование ожидаемого элемента
            /** getValueFromStorage */ // TODO Костыль по работе с данными
            if (value.equalsIgnoreCase("случайное значение")) {
                List<String> valuesList = getAllClickableLinks().texts();
                value = getRandomValueFromList(valuesList);
                int tryCount = 0;
                while (value.equals("...") && tryCount < 20) {
                    tryCount++;
                    System.out.println("Ошибка! Таблица не прогрузилась: " + value);
                    value = getRandomValueFromList(getAllClickableLinks().texts());
                }
                Storage.put("случайное значение", value);
    //            LogManager.getLogger().info("Выбрано случайное значение \"" + value + "\" из списка значений: \n " + valuesList);
                System.out.println("Выбрано случайное значение \"" + value + "\" из списка значений: \n " + valuesList);
            }
            if (Storage.get(value) != null) {
                if (Storage.get(value).equalsIgnoreCase("случайное значение")) {
                    List<String> valuesList = getAllClickableLinks().texts();
                    int tryCount = 0;
                    String temp = getRandomValueFromList(valuesList);
                    while (temp.equals("...") && tryCount < 20) {
                        tryCount++;
                        System.out.println("Ошибка! Таблица не прогрузилась: " + temp);
                        temp = getRandomValueFromList(getAllClickableLinks().texts());
                    }
                    Storage.put(value, temp);
    //                LogManager.getLogger().info("Выбрано случайное значение \"" + value + "\" из списка значений: \n " + valuesList);
                    System.out.println("Выбрано случайное значение \"" + value + "\" из списка значений: \n " + valuesList);
                }
                value = Storage.get(value);
            } else {
                value = getStorageData(value);
            }
            return new Row(value, проверитьЧтоОтображается);
        }
        CommonElementsCollection getAllClickableLinks() {
            return new CommonElementsCollection(resPage.getAllClickableLinks(), "Кликабельные ячейки", false);
        }

        public Row getRow(int i, boolean проверитьЧтоОтображается) {
            return new Row(i, проверитьЧтоОтображается);
        }
        public void waitForPageIsUnAvailable() {
            ожидатьЗагрузкуСтраницыИпроверитьОтсутствиеКрасныхАлертов(); //1. Ожидаем прогрузку страницы
            ожидатьЗагрузкуСтраницыИпроверитьОтсутствиеКрасныхАлертов();
            checkAlertDoesNotExist(); //2. Проверяем отсутствие Алерта
            try { //3. Выбираем котекст: если страница не существует, то переключаемся на общий контекст
                pageFactory.getPage(context);
            } catch (RuntimeException e) {
                pageFactory.getPage("ОбщиеЭлементыСтраниц");
            }
        }


        public class Rows {
            public ArrayList<Row> selenideElementsToRows(ElementsCollection sElemlist) {
                ArrayList<Row> list = new ArrayList<>();
                sElemlist.stream().forEach(e -> list.add(new Row(e, "Строка таблицы результатов", false)));
                return list;
            }
        }

        public class Row extends ElementImpl {
            public Row(SelenideElement element, String elementName, boolean проверитьЧтоЭлементОтображается) {
                super(element, elementName, проверитьЧтоЭлементОтображается, проверитьЧтоЭлементОтображается);
            }

            public Row(int i, boolean проверитьЧтоОтображается) {
                super(resPage.getValueByRowNumber(i), "Строка Таблицы результатов под номером \"" + i + "\"", проверитьЧтоОтображается, false);
            }

            public Row(String text, boolean проверитьЧтоОтображается) {
                super(resPage.getRowByValue(text), "Строка Таблицы результатов с текстом \"" + text + "\"", проверитьЧтоОтображается, false);
            }

            public Cell getCell(String columnName, boolean проверитьЧтоОтображается) {
                return new Cell(resPage.получитьЯчейкуВСтрокеКЕ(this.getWrappedElement(), columnName),
                        "Ячейка Таблицы результатов \"" + columnName + "\"",
                        проверитьЧтоОтображается, false);
            }

            public ArrayList<Cell> getCells() {
                ArrayList<Cell> listCell = new ArrayList<Cell>();
                this.findAll(By.xpath("./td")).stream().forEach(selenideElement -> listCell.add(new Cell(selenideElement, "Ячейка", true, false)));
                return listCell;
            }
        }
        public class Cell extends ElementImpl {

            public Cell(String page, String elementName, boolean проверитьЧтоЭлементОтображается, boolean проверитьЧтоЭлементДоступен) {
                super(page, elementName, проверитьЧтоЭлементОтображается, проверитьЧтоЭлементДоступен);
            }

            public Cell(SelenideElement element, String name, boolean проверитьЧтоЭлементОтображается, boolean проверитьЧтоЭлементДоступен) {
                super(element, name, проверитьЧтоЭлементОтображается, проверитьЧтоЭлементДоступен);
            }
        }
    }


Ответы (1 шт):

Автор решения: woesss

Метод com.codeborne.selenide.Selenide.page():

static ResTable tableResult = page(ResTable.class);  

видимо должен создать экземпляр класса, но принимает только его тип - а значит он не может знать и не имеет аргументов для конструктора этого класса, отличного от конструктора без параметров, которого нет у вашего класса ResTable.
Соответственно нужно либо добавить такой конструктор, либо использовать метод с параметрами (если таковой существует, конечно)

→ Ссылка