Проблема заключается в том что не работают тесты, когда хочу запустить их в headless chrome режиме выдает java.lang.NullPointerException
Когда запускаю тесты не в headless, то все работает замечательно
Вот мой BaseTest class:
public abstract class BaseTest {
public WebDriver driver;
protected abstract String getUrl();
@Before
public void setUp() {
Log.startLog(“Test is Starting…”);
System.setProperty(“webdriver.chrome.driver”, “src//test//resources//chromedriver”);
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
WebDriver driver = new ChromeDriver(options);
driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get(getUrl());
}
@After
public void tearDown() {
Log.endLog(“Test is Ending…”);
driver.manage().deleteAllCookies();
driver.close();
}
}
Далее попытался проверить и создал новый проект и все отработало отлично с таким кодом:
public class test {
public static void main(String[] args) {
System.setProperty(“webdriver.chrome.driver”, “/Users/alexsomov/Desktop/chromedriver2”);
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
WebDriver driver = new ChromeDriver(options);
driver.get(“https://www.google.com/”);
System.out.println("Page title is - " + driver.getTitle());
driver.close();
}
Далее прогнал дебаггером один из тестов и увидел что возможно проблема все таки в BaseTest классе и что то с драйвером делаю не то
Обновил до ChromeDriver 2.46.628411 и проверил совместимость версий, но все равно не работает.
Если поможет то вот полный exception:
java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
at com.sun.proxy.$Proxy8.click(Unknown Source)
at com.core.pages.LandingPage.clickPrivayPolicy(LandingPage.java:109)
at com.bo.Landing.privacyPolicyOpened(Landing.java:64)
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:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Обновил до 2.46.628411 гугл говорит что должны быть совместимы, но все равно та же ошибка. Поидее если бы у меня были не совместимы версии, то у меня бы и не в headless mode тесты падали, но они проходят нормально
Обновил все теперь так:
Chrome version: Version 72.0.3626.121 (Official Build) (64-bit)
Selenium version: 3.141.59
Chromedriver version: 2.46.628411
Перебилдил проект, все равно проблема не решилась
Нет, все тоже самое выдает, вот сделал простой тест что бы проверить например title у страницы:
Example url: https://www.wikipedia.org/
@Test
public void test() {
System.out.println(driver.getTitle());
}
вот его ошбка:
java.lang.NullPointerException
at com.bo.Landing.test(Landing.java:107)
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:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Хмм, у меня просто все тесты от BaseTest наследуются, хорошо вот допустим обычный тест: @Test
public void privacyPolicyOpened() throws InterruptedException {
LandingPage landingPage = new LandingPage(driver);
landingPage.clickPrivayPolicy();
Thread.sleep(1000);
Assert.assertEquals(true, landingPage.privacyPolicyTitle.isDisplayed());
}
вот ошибка:
java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
at com.sun.proxy.$Proxy8.click(Unknown Source)
at com.core.pages.LandingPage.clickPrivayPolicy(LandingPage.java:109)
at com.bo.Landing.privacyPolicyOpened(Landing.java:65)
65 строка это landingPage.clickPrivayPolicy();
109 строка это метод в пейджобжекте
public LandingPage clickPrivayPolicy() {
privacyPolicyBtn.click();
return this;
}
Еще одна ошибка всегда есть тут
java.lang.NullPointerException
at com.bo.BaseTest.tearDown(BaseTest.java:36)
36 строка в BaseTest это после теста
driver.manage().deleteAllCookies();
Зарегистрировалась только чтобы сказать спасибо, что зашли и дописали найденное решение!
У меня никак не хотели работать классы @Before и @After и проблема решилась точно так же! Ура!!