Помогите с наcледованием метода setup() и передачи параметра в метод супер класса

Добрый день. Столкнулся вот с такой проблемой. Пишу тесты на Java. Есть класс TestBase и я туда положил метода setUp() и tearDown(). Сейчас именно в этом классе я задаю переменную url.

package demoqa;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

import java.io.FileNotFoundException;

import static demoqa.settings.open_browser;



public class TestBase {

    WebDriver driver;



    @BeforeClass
    public void setUp() throws FileNotFoundException {
        String  url = "";
        driver = open_browser(url);
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }


}

А есть класс TestDemoqaComHome. Где я пытаюсь наследовать метод setUp(), и передать в метод супер класса т.е. TestBase параметр url, вопрос в том, что он мне всегда выдает ошибку.

package demoqa;

import helpers.SeleniumExtensions;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;
import pages.DemoqaComHomePage;

import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.List;


public class TestDemoqaComHome extends TestBase {


    @Override
    public void setUp() throws FileNotFoundException {
        super.setUp();


    }

    @Test
    public void testValidTitle() {
        Assert.assertEquals("Demoqa | Just another WordPress site", driver.getTitle());
    }

    @Test
    public void testValidHeaderTitles() {
        List<String> expectedListTitle = Arrays.asList("Home", "About us", "Services", "Demo", "Blog", "Contact");
        Assert.assertEquals(DemoqaComHomePage.getHeaderMenu(driver), expectedListTitle);
    }

    @Test
    public void testCheckTabs() {
        List<String> expectedTabs = Arrays.asList("Tab 1", "Tab 2", "Tab 3", "Tab 4", "Tab 5");
        Assert.assertEquals(expectedTabs, DemoqaComHomePage.getTabNames(driver));
    }

    @Test
    public void testValidMenuItem() {
        String menuItem = SeleniumExtensions.getElementText(driver, By.xpath("//li[@id=\"menu-item-38\"]/a"));
        String activeWay = SeleniumExtensions.getElementText(driver, By.className("active"));
        Assert.assertEquals(menuItem, activeWay);
    }

    @Test
    public void testValidPageHeader() {
        String menuItem = SeleniumExtensions.getElementText(driver, By.xpath("//li[@id=\"menu-item-38\"]/a"));
        String entryTitle = SeleniumExtensions.getElementText(driver, By.xpath("//h1[@class=\"entry-title\"]"));
        Assert.assertEquals(menuItem, entryTitle);
    }


}

Помогите решить данную проблему. Использую framework testNG

Добавил параметр методу setUp(String url)

package demoqa;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

import java.io.FileNotFoundException;

import static demoqa.settings.open_browser;


public class TestBase {
    WebDriver driver;
    
    @BeforeClass
    public void setUp(String url) throws FileNotFoundException {
//        String  url = "";
        driver = open_browser(url);
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }


}
package demoqa;

import helpers.SeleniumExtensions;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;
import pages.DemoqaComHomePage;

import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.List;


public class TestDemoqaComHome extends TestBase {


    @Override
    public void setUp(String url) throws FileNotFoundException {
        super.setUp(url);


    }

    @Test
    public void testValidTitle() {
        Assert.assertEquals("Demoqa | Just another WordPress site", driver.getTitle());
    }

    @Test
    public void testValidHeaderTitles() {
        List<String> expectedListTitle = Arrays.asList("Home", "About us", "Services", "Demo", "Blog", "Contact");
        Assert.assertEquals(DemoqaComHomePage.getHeaderMenu(driver), expectedListTitle);
    }

    @Test
    public void testCheckTabs() {
        List<String> expectedTabs = Arrays.asList("Tab 1", "Tab 2", "Tab 3", "Tab 4", "Tab 5");
        Assert.assertEquals(expectedTabs, DemoqaComHomePage.getTabNames(driver));
    }

    @Test
    public void testValidMenuItem() {
        String menuItem = SeleniumExtensions.getElementText(driver, By.xpath("//li[@id=\"menu-item-38\"]/a"));
        String activeWay = SeleniumExtensions.getElementText(driver, By.className("active"));
        Assert.assertEquals(menuItem, activeWay);
    }

    @Test
    public void testValidPageHeader() {
        String menuItem = SeleniumExtensions.getElementText(driver, By.xpath("//li[@id=\"menu-item-38\"]/a"));
        String entryTitle = SeleniumExtensions.getElementText(driver, By.xpath("//h1[@class=\"entry-title\"]"));
        Assert.assertEquals(menuItem, entryTitle);
    }


}

и вот какие ошибки выдает:

"C:\Program Files\Java\jdk1.8.0_77\bin\java" -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.1.1\bin" -Didea.testng.sm_runner -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.1.1\lib\idea_rt.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.1.1\plugins\testng\lib\testng-plugin.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_77\jre\lib\rt.jar;E:\test_files\JAVA\demoqa_com\target\test-classes;E:\test_files\JAVA\demoqa_com\target\classes;C:\Users\admin\.m2\repository\org\testng\testng\6.8\testng-6.8.jar;C:\Users\admin\.m2\repository\junit\junit\4.10\junit-4.10.jar;C:\Users\admin\.m2\repository\org\hamcrest\hamcrest-core\1.1\hamcrest-core-1.1.jar;C:\Users\admin\.m2\repository\org\beanshell\bsh\2.0b4\bsh-2.0b4.jar;C:\Users\admin\.m2\repository\com\beust\jcommander\1.27\jcommander-1.27.jar;C:\Users\admin\.m2\repository\org\yaml\snakeyaml\1.6\snakeyaml-1.6.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-java\2.53.0\selenium-java-2.53.0.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-chrome-driver\2.53.0\selenium-chrome-driver-2.53.0.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-remote-driver\2.53.0\selenium-remote-driver-2.53.0.jar;C:\Users\admin\.m2\repository\cglib\cglib-nodep\2.1_3\cglib-nodep-2.1_3.jar;C:\Users\admin\.m2\repository\com\google\code\gson\gson\2.3.1\gson-2.3.1.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-api\2.53.0\selenium-api-2.53.0.jar;C:\Users\admin\.m2\repository\org\apache\httpcomponents\httpclient\4.5.1\httpclient-4.5.1.jar;C:\Users\admin\.m2\repository\org\apache\httpcomponents\httpcore\4.4.3\httpcore-4.4.3.jar;C:\Users\admin\.m2\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;C:\Users\admin\.m2\repository\commons-codec\commons-codec\1.9\commons-codec-1.9.jar;C:\Users\admin\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-edge-driver\2.53.0\selenium-edge-driver-2.53.0.jar;C:\Users\admin\.m2\repository\commons-io\commons-io\2.4\commons-io-2.4.jar;C:\Users\admin\.m2\repository\org\apache\commons\commons-exec\1.3\commons-exec-1.3.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-firefox-driver\2.53.0\selenium-firefox-driver-2.53.0.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-ie-driver\2.53.0\selenium-ie-driver-2.53.0.jar;C:\Users\admin\.m2\repository\net\java\dev\jna\jna\4.1.0\jna-4.1.0.jar;C:\Users\admin\.m2\repository\net\java\dev\jna\jna-platform\4.1.0\jna-platform-4.1.0.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-safari-driver\2.53.0\selenium-safari-driver-2.53.0.jar;C:\Users\admin\.m2\repository\io\netty\netty\3.5.7.Final\netty-3.5.7.Final.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-support\2.53.0\selenium-support-2.53.0.jar;C:\Users\admin\.m2\repository\org\seleniumhq\selenium\selenium-leg-rc\2.53.0\selenium-leg-rc-2.53.0.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA 2016.1.1\plugins\testng\lib\jcommander.jar" com.intellij.rt.execution.application.AppMain org.testng.RemoteTestNGStarter -port 58136 -usedefaultlisteners false -socket58137 @w@C:\Users\admin\AppData\Local\Temp\idea_working_dirs_testng.tmp -temp C:\Users\admin\AppData\Local\Temp\idea_testng.tmp
[TestNG] Running:
  C:\Users\admin\.IntelliJIdea2016.1\system\temp-testng-customsuite.xml

java.lang.NullPointerException
	at pages.DemoqaComHomePage.getTabNames(DemoqaComHomePage.java:15)
	at demoqa.TestDemoqaComHome.testCheckTabs(TestDemoqaComHome.java:38)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
	at org.testng.SuiteRunner.run(SuiteRunner.java:240)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
	at org.testng.TestNG.run(TestNG.java:1031)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


java.lang.NullPointerException
	at pages.DemoqaComHomePage.getHeaderMenu(DemoqaComHomePage.java:27)
	at demoqa.TestDemoqaComHome.testValidHeaderTitles(TestDemoqaComHome.java:32)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
	at org.testng.SuiteRunner.run(SuiteRunner.java:240)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
	at org.testng.TestNG.run(TestNG.java:1031)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


java.lang.NullPointerException
	at helpers.SeleniumExtensions.getElementText(SeleniumExtensions.java:9)
	at demoqa.TestDemoqaComHome.testValidMenuItem(TestDemoqaComHome.java:43)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
	at org.testng.SuiteRunner.run(SuiteRunner.java:240)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
	at org.testng.TestNG.run(TestNG.java:1031)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


java.lang.NullPointerException
	at helpers.SeleniumExtensions.getElementText(SeleniumExtensions.java:9)
	at demoqa.TestDemoqaComHome.testValidPageHeader(TestDemoqaComHome.java:50)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
	at org.testng.SuiteRunner.run(SuiteRunner.java:240)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
	at org.testng.TestNG.run(TestNG.java:1031)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


java.lang.NullPointerException
	at demoqa.TestDemoqaComHome.testValidTitle(TestDemoqaComHome.java:26)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
	at org.testng.SuiteRunner.run(SuiteRunner.java:240)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
	at org.testng.TestNG.run(TestNG.java:1031)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


java.lang.NullPointerException
	at demoqa.TestBase.tearDown(TestBase.java:23)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
	at org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:225)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
	at org.testng.TestRunner.privateRun(TestRunner.java:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
	at org.testng.SuiteRunner.run(SuiteRunner.java:240)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
	at org.testng.TestNG.run(TestNG.java:1031)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
	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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


===============================================
Default Suite
Total tests run: 5, Failures: 5, Skips: 0
Configuration Failures: 1, Skips: 0
===============================================


Process finished with exit code 0

Валятся все тесты

По коду вы же вообще ничего не передаете в метод setUp().
Сделайте хотя бы setUp(String url) и радуйтесь

впервые вижу вот такое:

driver = open_browser(url);

что это? Что-то типо такого?

driver.get(url);

и еще вот это тоже непонятно

@Override
public void setUp(String url) throws FileNotFoundException {
    super.setUp(url);
}

вы унаследовались от TestBase и сделали оверрайд setUp метода и он параметризирован. Откуда берется значения урла - url?

Можно глянуть весь проект? Как-то специфично все написано там внутри фреймворка вашего…

TestDemoqaComHome - файл с тестами:

package demoqa;

import helpers.SeleniumExtensions;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;
import pages.DemoqaComHomePage;

import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.List;


public class TestDemoqaComHome extends TestBase {


    @Override
    public void setUp(String url) throws FileNotFoundException {
        super.setUp("");


    }

    @Test
    public void testValidTitle() {
        Assert.assertEquals("Demoqa | Just another WordPress site", driver.getTitle());
    }

    @Test
    public void testValidHeaderTitles() {
        List<String> expectedListTitle = Arrays.asList("Home", "About us", "Services", "Demo", "Blog", "Contact");
        Assert.assertEquals(DemoqaComHomePage.getHeaderMenu(driver), expectedListTitle);
    }

    @Test
    public void testCheckTabs() {
        List<String> expectedTabs = Arrays.asList("Tab 1", "Tab 2", "Tab 3", "Tab 4", "Tab 5");
        Assert.assertEquals(expectedTabs, DemoqaComHomePage.getTabNames(driver));
    }

    @Test
    public void testValidMenuItem() {
        String menuItem = SeleniumExtensions.getElementText(driver, By.xpath("//li[@id=\"menu-item-38\"]/a"));
        String activeWay = SeleniumExtensions.getElementText(driver, By.className("active"));
        Assert.assertEquals(menuItem, activeWay);
    }

    @Test
    public void testValidPageHeader() {
        String menuItem = SeleniumExtensions.getElementText(driver, By.xpath("//li[@id=\"menu-item-38\"]/a"));
        String entryTitle = SeleniumExtensions.getElementText(driver, By.xpath("//h1[@class=\"entry-title\"]"));
        Assert.assertEquals(menuItem, entryTitle);
    }


}

Файл TestBase:

package demoqa;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;

import java.io.FileNotFoundException;

import static demoqa.settings.open_browser;


public class TestBase {
    WebDriver driver;

    @BeforeClass
    public void setUp(String url) throws FileNotFoundException {
//        String  url = "";
        driver = open_browser(url);
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }


}

файл setting:

package demoqa;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

class settings {



    private static String getBrowser() throws FileNotFoundException {
        File pathToFile = new File(".\\src\\test\\java\\demoqa\\config.json");
        FileReader fReader = new FileReader(pathToFile);
        JsonParser jParser = new JsonParser();
        JsonObject jObject = (JsonObject) jParser.parse(fReader);
        return jObject.get("browser").toString().replace("\"", "");
    }

    private static String getUrl() throws FileNotFoundException {
        File pathToFile = new File(".\\src\\test\\java\\demoqa\\config.json");
        FileReader fReader = new FileReader(pathToFile);
        JsonParser jParser = new JsonParser();
        JsonObject jObject = (JsonObject) jParser.parse(fReader);
        return jObject.get("URL").toString().replace("\"", "");
    }

    static WebDriver open_browser(String url_index) throws FileNotFoundException {
        WebDriver driver;
        if (getBrowser().equals("Chrome"))
        {
            driver = new ChromeDriver();
        }
        else if (getBrowser().equals("Firefox"))
        {
            driver = new FirefoxDriver();
        }
        else
        {
            driver = new InternetExplorerDriver();
        }
        driver.manage().window().maximize();
        driver.get(getUrl() + url_index);
        return driver;
    }
}

Файл конфига:(json)

{
  "browser": "Chrome",
  "URL": "http://demoqa.com/"
}

open_browser(url) - собственный метод, я там выбираю браузер

значение url - опечатка, должно быть super.setUp("");

Яссно, у вас NullPointerException как раз в driver, если пройтись дебагом, то в драйвере null - Monosnap, в такой реализации вам надо в классе - TestDemoqaComHome сделать конструктор, а не оверрайд метода setUp:

public class TestDemoqaComHome extends TestBase {

   public TestDemoqaComHome() throws FileNotFoundException {
      super.setUp("");
  }

  //    @Override
  //    public void setUp(String url) throws FileNotFoundException {
  //        super.setUp("");
  //    }

  @Test()
  public void testValidTitle() {
      assertEquals("Demoqa | Just another WordPress site", driver.getTitle());
  }

Но все равно реализация какая-то стремненькая, как по мне. Очень много статики у вас получается. Менять профили и урлы можно в профайлах pom.xml. Когда вы свой проект выкатите на дженкинс вы из консоли сможете переключать профили, как-то так:

mvn clean test -P chrome_demoqa
mvn clean test -P firefox_demoqa
mvn clean test -P safari_demoqa

команду точно не помню, но как-то так. А у вас получился json, который придется менять ручками…

Зачем Вам вообще вызывать самостоятельно setUp? Он же вызовется в любом случае перед классом.
Если Вы хотите в каждом тесте передавать разный url, используйте полиморфизм:

    @BeforeClass
    public void setUp() throws FileNotFoundException {
        String url = getUrl();
        driver = open_browser(url);
    }

    protected String getUrl() {
        return "";
    }

А в наследниках оверрайдите:

    @Override
    protected String getUrl() {
        return "otherString";
    }

Да, вот это ваще хороший вариант от @aleksey_ilyenko, если хотите оставить свою реализацию с json…

Только по фэн-шую будет так:

public abstract class TestBase {

  WebDriver driver;

  @BeforeClass
  public void setUp() throws FileNotFoundException {
      String url = getUrl();
      driver = open_browser(url);
  }

  abstract String getUrl();

}

и так:

 public class TestDemoqaComHome extends TestBase {

    @Override
    String getUrl() {
        return "/about-us/";
    }

    @Test()
    public void testValidTitle() {
        assertEquals("Demoqa | Just another WordPress site1", driver.getTitle());
    }

}

Обычно TestBase - абстрактный класс и в нем можно сделать абстрактный метод. Когда будете наследовать этот класс TestBase, то оно вам подскажет, что надо этот абстрактный метод имплементировать для переопределения урла (защита от дурака)…

если хотите HomePage, тогда

@Override
String getUrl() {
    return "";
}

если хотите ДругойПейдж, тогда:

@Override
String getUrl() {
    return "/about-us/";
}

Jenkins:

Local:

Code:

driver.navigate().to(System.getenv("BUILD_URL"));
5 лайков

Спасибо, большое, парни. Воспользовался методом @aleksey_ilyenko

@evgmoskalenko Только один вопрос - а почему именно абстрактный класс, абстрактный методы? Я не совсем понимаю чем они лучше

Спасибо, интересный подход…

Вот тут довольно забавно описано - Зачем абстрактный класс в java - Stack Overflow на русском

В вашем же случае, все ваши тестовые классы наделены общим параметром УРЛ, который надо переопределять в каждом и нельзя об этом забыть.

Представьте, придет новый человек и столкнется с вашим фреймворком и захочет написать тесты для страницы - DEMOQA

создаст класс:

public class TestDemoqaComDraggable {

унаследуется от TestBase

public class TestDemoqaComDraggable extends TestBase {

и в вашем случае ему не будет понятно, что ему надо создать метод:

@Override
protected String getUrl() {
    return "/draggable/";
}

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

abstract String getUrl();

это абстрактный метод, у которого нет реализации, но такой метод должен быть во всех классах наследниках базового абстрактного класса… :slight_smile: Потому что во всех таких классах-тестах надо переопределять урл странички.

Если создать класс и унаследоваться от абстрактного и не имплементировать такой метод

@Override
String getUrl() {
    return "/draggable/";
}

то вам покажет ошибку и ваше приложение не запуститься… Как я выше писал, в вашем случае - защита от дурака… Также, если этого не сделать, то если вы создадите класс и забудете написать реализацию такого абстрактного метода, то ваши тесты будут просто открывать вам HomePage, потому что в базовом классе вы указали такой метод:

protected String getUrl() {
    return "";
}

а в классе наследнике забыли переопределить:

public class TestDemoqaComDraggable extends TestBase {

Это из области ООП, некая абстракция, чтобы в сложных и больших приложениях было проще разрабатывать то самое приложение. Что-то наделяют некой абстракцией, чем-то общим с другими такими объектами.

Надеюсь понятненько объяснил.

2 лайка