Невозможно создать экземпляр класса HomePage - PullRequest
0 голосов
/ 08 мая 2020

Привет, я изо всех сил пытаюсь понять, что я сделал не так. Я пробую selenium webdriver с TestNG каждый раз, действительно базовый c материал, но я не понимаю, почему, когда я помещаю все в свой before, chrome запускается. Но я хочу, чтобы мой код был более аккуратным и менее неуклюжим. Похоже, мне нужно вставить драйвер в свой класс, чтобы он имел глобальное влияние. Вместо того, чтобы устанавливать новый веб-драйвер в каждый новый тест, который я создаю. Есть ли способ лучше?

Cannot instantiate class HomePage
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:40)
    at org.testng.internal.ClassHelper.createInstance1(ClassHelper.java:363)
    at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:275)
    at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:126)
    at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:191)


  import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;

    import org.testng.annotations.*;


    public class HomePage {
         WebDriver driver = new ChromeDriver();



        @BeforeTest
        public void beforeTest() {
            System.setProperty("webdriver.chrome.driver", "C:/webdrivers/chromedriver81/chromedriver.exe");

            driver.get("http://www.dotdotloans.co.uk");
        }


        @Test
        public void verify36monthloan3250() {

            driver.findElement(By.cssSelector("Tarife")).click();
            // confirm monthly repayment
            // credit charge 2 decimal places
            //total to pay 2 decimal places
            //APR
            //Click Apply now
            //verify string has 3250 and 36 months

            System.out.println("Welcome");


        }

        @AfterTest
        public void AfterTest() {
            driver.quit();
        }
    }

1 Ответ

0 голосов
/ 08 мая 2020

Эта строка WebDriver driver = new ChromeDriver(); выполняется до того, как вы установите необходимое свойство для установки пути к исполняемому файлу:

System.setProperty("webdriver.chrome.driver", "C:/webdrivers/chromedriver81/chromedriver.exe");

Вы можете либо установить значение свойства в stati c блок инициализации

public class HomePage{

  static{
    System.setProperty(blah-blah);
  }

  WebDriver driver = new ChromeDriver();

  // ..

}

или создайте новый драйвер в @BeforeTest после того, как вы установили значение свойства пути к исполняемому файлу. Последний вариант более естественен .

PS - я не уверен, но даже если использовать исправление с инициализацией stati c, ваш код может работать некорректно, так как TestNG может повторно использовать объект тестового класса, и, поскольку вы завершаете драйвер, второй тест вашего класса не сможет запуститься (если вы добавите второй тест).

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