从抽象类

时间:2015-05-21 03:50:11

标签: java

我有一个这样的课 父类DevPortalTestControllerabsract

public class SeleniumWebDriverFactory extends DevPortalTestController {
    public static RemoteWebDriver mDriver;

    public SeleniumWebDriverFactory(RemoteWebDriver whichDriver)throws UnsupportedOSException, PoisonException {
        super(whichDriver);
        mDriver = whichDriver;
    }   

    public List<TestContext> getBrowserTestContext(List<String> browsers)
            throws Exception {
        PhoenixDriver driver = null;
        List<TestContext> contexts = new ArrayList<TestContext>();

        logger.info("Setting browser context...");

        Login login = retrieveLoginData();
        for (String browser : browsers) {
             // operations

             Map<String, Object> browserMap = new HashMap<String, Object>();

            // Populate the map with DevPortalTestController objects.
            browserMap.put(MasterConstants.BROWSER, this);

            .....
            .....
        }
        return contexts;
    }

public static List<TestContext> getTestContext(List<String> browsers)
        throws Exception {
    SeleniumWebDriverFactory instanceSel = new SeleniumWebDriverFactory(mDriver);
    List<TestContext> contexts = instanceSel.getBrowserTestContext(browsers);
    return contexts;
}

}

我需要在另一个类中调用此getTestContext方法 因为这样做。这个类正在扩展另一个parnet类

public class DevPortalTest extends Test {


    RemoteWebDriver rmDriver ;
    SeleniumWebDriverFactory selFac =new SeleniumWebDriverFactory(rmDriver);


    @Override
    public List<TestContext> getTestContexts() {
        try {
            String os = System.getProperty("os.name");

            if (SystemDetail.deviceIsRunningWindows()) {
                return  selFac.getTestContext(ZucchiniConstants.allBrowsers);
           else {
                throw new TestException(os + " is not supported");
            }
        } catch (Exception e) {
            logger.error("", e);
        }

        return null;
    }
}

但是在这个地方

SeleniumWebDriverFactory selFac =new SeleniumWebDriverFactory(rmDriver);

我正在

  

默认构造函数无法处理异常类型PoisonException   由隐式超级构造函数抛出。必须定义一个明确的   构造

如何调用getTestContext测试类中的方法DevPortalTest

5 个答案:

答案 0 :(得分:1)

问题是初始化代码将被置于&#34;默认构造函数&#34;哪个不能抛出任何异常。定义一个抛出异常以继续的空构造函数。

如,

DevPortalTest() throws UnsupportedOSException, PoisonException { }

答案 1 :(得分:0)

您必须将构造函数添加到测试代码中:

public DevPortalTest() throws UnsupportedOSException, PoisonException {
    SeleniumWebDriverFactory selFac = new SeleniumWebDriverFactory(rmDriver);
}

另外,我假设你正在注射RemoteWebDriver rmDriver;

答案 2 :(得分:0)

由于该方法是静态的,因此您不需要对象来调用它。

SeleniumWebDriverFactory.getTestContext(ZucchiniConstants.allBrowsers);

答案 3 :(得分:0)

作为创建构造函数的替代方法,您也可以执行此操作

public class DevPortalTest extends Test {

    RemoteWebDriver rmDriver ;
    SeleniumWebDriverFactory selFac;

    // this code block runs before constructor
    {
        try{
            selFac = new SeleniumWebDriverFactory(rmDriver);
        }catch(Exception e){
            // handle exception
        }
    }

答案 4 :(得分:0)

可以使用类名访问静态方法,因此无需在Abstract类中创建任何Object。