2015-05-21 2 views
1

У меня есть класс, как этот родительского класс DevPortalTestController является absractВызов статического метода из абстрактного класса

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 метод в другом классе для этого делает, как этот класс также распространяется на другой класс паркета

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 тестового класса?

+0

Вы на самом деле вызываете суперкласс constrctor здесь 'public SeleniumWebDriverFactory (RemoteWebDriver whichDriver) бросает UnsupportedOSException, PoisonException { super (whichDriver); mDriver = whichDriver; } ' Определить пустой конструктор (без аргумента). – Babel

+2

Пожалуйста, укажите минимальный полный пример; см. http://stackoverflow.com/help/mcve. – ruakh

+0

никакого конструктора аргументов нет в родительском классе ... это класс зависимости – Psl

ответ

1

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

например,

DevPortalTest() throws UnsupportedOSException, PoisonException { } 
0

Вы должны добавить конструктор тестового кода:

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

также, я предполагаю, что вы инъекционного RemoteWebDriver rmDriver;

0

Поскольку метод является статическим, вам не нужен объект, чтобы вызвать его.

SeleniumWebDriverFactory.getTestContext(ZucchiniConstants.allBrowsers); 
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 
     } 
    } 
0

статический метод можно получить с помощью класса Name, так что нет необходимости в создании какой-либо объект в абстрактном классе.