Конструктор по умолчанию не может обработать исключение типа IOException - PullRequest
0 голосов
/ 06 декабря 2018

Извиняюсь, если на этот вопрос уже был дан ответ, но я посмотрел и не смог найти ничего, что мне помогло.Я получаю сообщение об ошибке в заголовке при попытке запустить следующий код.Кто-нибудь знает, какой явный конструктор можно использовать для исправления этой ошибки?

public class HomePageTest extends TestBase{

    LoginPage loginPage;
    HomePage homePage;
    ShopByDepartmentPage shopByDepartmentPage;
    JamiesAmazonPage jamiesAmazonPage;
    TodaysDealsPage todaysDealsPage;
    MyAccountPage myAccountPage;
    BasketPage basketPage;

    public HomePageTest() throws IOException {
        super();
    }

    @BeforeMethod
    public void setUp() throws IOException {
        initialization();
        loginPage = new LoginPage();
        shopByDepartmentPage = new ShopByDepartmentPage();
        jamiesAmazonPage = new JamiesAmazonPage();
        todaysDealsPage = new TodaysDealsPage();
        myAccountPage = new MyAccountPage();
        basketPage = new BasketPage();
        homePage = loginPage.login(prop.getProperty("username"), 
        prop.getProperty("password"));
    }
}

Мой тестовый базовый код:

public static WebDriver driver;
public static Properties prop;

public TestBase() throws IOException {

    try {
        prop = new Properties();
        FileInputStream fis = new FileInputStream("D:\\Users\\mcalpinej\\Desktop\\POM Project\\POM_Project\\src\\main\\java\\Config\\config.properties");
        prop.load(fis);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void initialization() {

    if (prop.getProperty("browser").equals("firefox"))
    {
        System.setProperty("webdriver.gecko.driver", "D:\\Users\\mcalpinej\\Desktop\\POM Project\\POM_Project\\src\\main\\java\\Resources\\geckodriver.exe");
        driver = new FirefoxDriver();
    }
    else if (prop.getProperty("browser").equals("chrome"))
    {
        System.setProperty("webdriver.chrome.driver", "D:\\Users\\mcalpinej\\Desktop\\POM Project\\POM_Project\\src\\main\\java\\Resources\\chromedriver.exe");
        driver = new ChromeDriver();
    }

    driver.manage().window().maximize();
    driver.manage().deleteAllCookies();
    driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS);

    driver.get(prop.getProperty("url"));
}

Полный код трассировки стека выглядит следующим образом:

FAILED CONFIGURATION: @BeforeMethod setUp
java.lang.Error: Unresolved compilation problem: 
Default constructor cannot handle exception type IOException thrown by 
implicit super constructor. Must define an explicit constructor

at Pages.ShopByDepartmentPage.<init>(ShopByDepartmentPage.java:5)
at TestCases.HomePageTest.setUp(HomePageTest.java:38)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:458)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:523)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:648)
at org.testng.TestRunner.run(TestRunner.java:505)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
at org.testng.SuiteRunner.run(SuiteRunner.java:364)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
at org.testng.TestNG.runSuites(TestNG.java:1049)
at org.testng.TestNG.run(TestNG.java:1017)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

Когда я пытаюсь поместить метод @Before в ловушку попытки, как показано ниже, я все равно получаю то же сообщение об ошибке:

 @BeforeMethod
public void setUp() {
    initialization();
    try {
        loginPage = new LoginPage();
        shopByDepartmentPage = new ShopByDepartmentPage();
        jamiesAmazonPage = new JamiesAmazonPage();
        todaysDealsPage = new TodaysDealsPage();
        myAccountPage = new MyAccountPage();
        basketPage = new BasketPage();
        homePage = loginPage.login(prop.getProperty("username"), prop.getProperty("password"));
    }
    catch (Exception e) {
        e.printStackTrace();
    }

ShopByDepartmentPage code:

public class ShopByDepartmentPage extends TestBase{

@FindBy(xpath="//tr//td[1]//div[1]//ul[1]//li[1]")
WebElement videos;

@FindBy(xpath="//li[@class='nav_first']//a[@class='nav_a'][contains(text(),'Books')]")
WebElement books;

@FindBy(xpath="//li[@class='nav_first']//a[@class='nav_a'][contains(text(),'Amazon Music Unlimited')]")
WebElement music;

@FindBy(xpath="//tr//td[2]//div[4]//ul[1]//li[6]//a[1]")
WebElement computerGames;

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Тот факт, что сообщаемая немедленная ошибка является Unresolved compilation problem, намекает на что-то еще: Этот тип ошибки может быть вызван байт-кодом, скомпилированным с помощью компилятора eclipse, который выполняет инкрементную компиляцию.

Это похоже наВ какой-то момент у вас не было явного конструктора по умолчанию в производном классе, и ваша IDE (возможно, eclipse, но может быть другая, использующая компилятор eclipse) и / или система сборки не смогла перекомпилировать этот класс с тех пор, поэтомувы все еще используете старый байт-код.

Попробуйте выполнить чистую сборку и следите за другими ошибками компиляции.Если у вас есть правильная система сборки, такая как maven или gradle, закройте IDE и запустите команду clean & build, используя это.Система сборки может принимать .class файлов, сгенерированных на лету средой IDE.

0 голосов
/ 06 декабря 2018

Похоже, что ваш модуль модульного тестирования не может обработать проверенный Exception, брошенный из Конструктора.

Очевидный совет - не бросайте Exception.Если фреймворк не позволяет этого, это, вероятно, по уважительной причине - то есть он может не отображать Exception в хорошем смысле.

Если вы действительно хотите использовать эту логику в конструкторе,альтернативой является перебрасывание IOException как ExceptionInInitializerError, что является непроверенным Exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...