При запуске тестов на HtmlUnitDriver NullPointerException

Добрый день. Решил для запуска тестов использовать HtmlUnitDriver. Сразу столкнулся с проблемой.В BeforeTest я в зависимости от указанного в testNG.xml файле параметра запускаю тест в определенном браузере. Туда же я втулил одним из вариантов выполнения тестов HtmlUnitDriver. В итоге при запуске тестов вылетает ошибка, в чем причина понять не могу. Подскажите пожалуйста, что делаю не так.

Вот лог ошибок:
java.lang.NullPointerException
at basicTests.BasicTest.beforeTest(BasicTest.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:215)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
at org.testng.TestRunner.beforeRun(TestRunner.java:656)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:122)

Disconnected from the target VM, address: ‘127.0.0.1:54202’, transport: ‘socket’

Ну и здесь у меня создается екземпляр драйвера:
if (browser.equalsIgnoreCase("firefox")){ driver = new FirefoxDriver(); } else if (browser.equalsIgnoreCase("chrome")){ System.setProperty("webdriver.chrome.driver", "C:\\tools\\drivers\\chromedriver.exe"); driver = new ChromeDriver(); } else if (browser.equalsIgnoreCase("opera")){ System.setProperty("webdriver.opera.driver", "C:\\tools\\drivers\\operadriver.exe"); driver = new OperaDriver(); } else if (browser.equalsIgnoreCase("safari")){ System.setProperty("webdriver.safari.driver", "C:\\tools\\drivers\\safaridriver.exe"); driver = new SafariDriver(); } else if (browser.equalsIgnoreCase("ie")){ System.setProperty("webdriver.ie.driver", "C:\\tools\\drivers\\IEDriverServer.exe"); driver = new InternetExplorerDriver(); } else if (browser.equalsIgnoreCase("html")){ System.setProperty("webdriver.html.driver", "C:\\tools\\drivers\\selenium-htmlunit-driver-2.49.0.jar"); HtmlUnitDriver driver = new HtmlUnitDriver(); driver.setJavascriptEnabled(true); System.out.println("create html driver"); }

Там что происходит? Кусок кода плиз.

public class BasicTest {
public static WebDriver driver;

@BeforeTest
@Parameters("browser")
public void beforeTest(String browser) throws Exception{
    if (browser.equalsIgnoreCase("firefox")){
        driver = new FirefoxDriver();
    }
    else if (browser.equalsIgnoreCase("chrome")){
        System.setProperty("webdriver.chrome.driver", "C:\\tools\\drivers\\chromedriver.exe");
        driver = new ChromeDriver();
    }
    else if (browser.equalsIgnoreCase("opera")){
        System.setProperty("webdriver.opera.driver", "C:\\tools\\drivers\\operadriver.exe");
        driver = new OperaDriver();
    }
    else if (browser.equalsIgnoreCase("safari")){
        System.setProperty("webdriver.safari.driver", "C:\\tools\\drivers\\safaridriver.exe");
        driver = new SafariDriver();
    }
    else if (browser.equalsIgnoreCase("ie")){
        System.setProperty("webdriver.ie.driver", "C:\\tools\\drivers\\IEDriverServer.exe");
        driver = new InternetExplorerDriver();
    }
    else if (browser.equalsIgnoreCase("html")){
        System.setProperty("webdriver.html.driver", "C:\\tools\\drivers\\selenium-htmlunit-driver-2.49.0.jar");
        HtmlUnitDriver driver = new HtmlUnitDriver();
        driver.setJavascriptEnabled(true);
        System.out.println("create html driver");
    }
    driver.manage().deleteAllCookies();
    driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
    driver.manage().window().maximize();
}

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

}

А 59 строка это не driver.manage().deleteAllCookies(); случаем?
Вы уверены, что передаете в @Parameters(“browser”) значение “html”?

59 строка driver.manage().deleteAllCookies(); - так и есть
В @Parameters(“browser”) передаю html, вот тут:

<test name="html">
<parameter name="browser" value="html"/>
    <classes>
        <class name="loginTest.LoginPositiveTest"/>
    </classes>
</test>

Направлю сразу в суть

Ага. мысль хорошая, но думаю раньше работало как-то на других браузерах, значит не в этом проблема.

А в логе есть сообщение “create html driver”?

да, есть

Эх Борис, не уловили вы сути :frowning:

1 лайк

Ахаха да, клево. Не заметил:smile_cat:

Изменил на

else if (browser.equalsIgnoreCase("html")){
    System.setProperty("webdriver.html.driver", "C:\\tools\\drivers\\selenium-htmlunit-driver-2.49.0.jar");
    driver = new HtmlUnitDriver(true);
    System.out.println("create html driver");

}

BeforeTest отработал, вылетел новый ексепшн:

org.openqa.selenium.WebDriverException: com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot find function bind in object function (D, C, B) {...}. (https://www.test.com/static/js/react-with-addons-0.12.2.js#1)

Build info: version: ‘2.48.2’, revision: ‘41bccdd10cf2c0560f637404c2d96164b67d9d67’, time: ‘2015-10-09 13:08:06’
System info: host: ‘DESKTOP-OH3BNTV’, ip: ‘10.1.4.74’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_66’
Driver info: driver.version: HtmlUnitDriver

at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:554)
at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:530)
at PageObjects.Home.HomePage.loadPageFavBet(HomePage.java:36)
at loginTest.LoginPositiveTest.LoginCorrect(LoginPositiveTest.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)

Не знаток HtmlUnit’а, но наверно js все таки надо выключить " driver.setJavascriptEnabled(false);" или если он нужен использоват PhantomJS driver

Использовал PhantomJS driver, все работает ок. Но все таки интерестно теперь разобраться с HtmlUnit