“默认构造函数未定义隐式超级构造函数BaseTestMethod()。必须定义显式构造函数”如何修复此错误?

时间:2017-06-17 19:03:30

标签: java selenium constructor

所以我在基础包中有一个基类,我将该基类扩展到另一个包中的另一个类。

在扩展类中我得到这个错误:“默认构造函数未定义隐式超类构造函数BaseTestMethod()。必须定义一个显式构造函数”。我尝试添加super()但它没有解决问题。有人可以帮忙吗

基类:

public class BaseTestSuite{
    public WebDriver driver;

    @Parameters("browserType")
    @BeforeSuite
    public void beforeSuite(String browserType) {

        System.out.println("BaseTestSuite -> Before Test Suite");
        if (browserType.equalsIgnoreCase("firefox")) {
            System.getProperty(DefaultStrings.FIREFOX_DRIVER_KEY, DefaultStrings.FIREFOX_DRIVER_PATH);
            driver = new FirefoxDriver();
        } else if (browserType.equalsIgnoreCase("chrome")) {
            System.setProperty(DefaultStrings.CHROME_DRIVER_KEY, DefaultStrings.CHROME_DRIVER_PATH);
            driver = new ChromeDriver();
        }
    }
}

扩展类:

public class FlockSignIn extends BaseTestMethod {
    private WebDriver driver;
    private static final Logger log = LogManager.getLogger(FlockSignIn.class.getName());
    static GenericMethods gm;

    public WebDriver getDriver(){
        return driver;
    }

    FlockSignIn(String browserType){
        super browserType;
    }

    @BeforeClass
    public void beforeClass() {

        /*System.out.println("BaseTestSuite -> Before Test Suite");
        if (browserType.equalsIgnoreCase("firefox")) {
            System.getProperty(DefaultStrings.FIREFOX_DRIVER_KEY, DefaultStrings.FIREFOX_DRIVER_PATH);
            driver = new FirefoxDriver();
        } else if (browserType.equalsIgnoreCase("chrome")) {
            System.setProperty(DefaultStrings.CHROME_DRIVER_KEY, DefaultStrings.CHROME_DRIVER_PATH);
            driver = new ChromeDriver();
        }*/

        gm = new GenericMethods(driver);

        gm.maximize();
        driver.get(DefaultStrings.FLOCK_WEB_PREPROD);
        log.info("Opening the webclient");
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
    }

2 个答案:

答案 0 :(得分:1)

在BaseTestMethod类中,添加构造函数

public BaseTestMethod(){
.....

}

或者  修改你的flockSignIn构造函数:

FlockSignIn(String browserType){
    super (param defined in BaseTestMethod's constructor);
    ..
}

答案 1 :(得分:1)

实施存在多个问题:

  1. 父类名称为BaseTestSuite,您正在扩展 BaseTestMethod
  2. 如果默认构造函数super()被隐式调用,并且如果父项有自己的重载构造函数,我们需要调用super(argument list)而不是super argument list

    我希望它能解决你的问题。