2016-04-20 72 views
1

我正在使用Selenium,我對Java很新。我有三個類ATSmoke(),它是主類。我在Excel工作表中的所有方法名稱都位於其他兩個類Profile()和Schedule()中。現在我使用POI庫來獲取單元格值(即方法名稱)。在這裏,我陷入瞭如何在另一個類Profile()中調用這些方法(edit_contact_info)。如果他們在同一班,我可以使用相同的班級名稱來引用。但不能爲另一個班級做。另外還有一種叫ATTestDriver在那裏我有所有實用的方法,如選擇webdriver的,瀏覽器類等我如何調用在主類java的其他類中的方法

公共類ATSmoke {

public static void main(String[] args){ 
    Profile profileDriver = new Profile(Browsers.CHROME); 
    XSSFWorkbook srcBook = null; 
    try { 
     srcBook = new XSSFWorkbook("./TestData/Testcase_data_v1.xlsx"); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    XSSFSheet sourceSheet = srcBook.getSheet("Testcases"); 
    int rowCount = sourceSheet.getLastRowNum(); 
    for (int i=1; i<=rowCount; i++){ 
     int rownum=i; 
      XSSFRow testcaserow=sourceSheet.getRow(rownum); 
      XSSFCell testcase_Name= testcaserow.getCell(1); 
      String flagState=testcaserow.getCell(2).getStringCellValue(); 
     if (flagState.equals("yes")) { 

     if (testcase_Name != null) { 
      try { 
       Method myMethod = ATSmoke.class.getMethod(testcase_Name.getStringCellValue()); 
       myMethod.invoke(new ATSmoke()); 
      } catch (NoSuchMethodException | SecurityException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (InvocationTargetException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      System.out.println(""); 
     } 
    } 
    } 
    try { 
     srcBook.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

公共類檔案擴展ATTestDriver {

public Profile(Browsers browser) { 
    super(browser); 
} 

public void edit_contact_info() { 
    WebElement pageopened =this.waitForElement(By.cssSelector(".qualifications p b b")); 
    System.out.println("you have " +pageopened.getText()); 

    driver.findElement(By.cssSelector("contact-information button")).click(); 

    } 

}

+0

profileDriver.edit_contact_info()? – user2677821

回答

0

要調用另一個類中的方法,您首先必須實例化它:

MyClass myClass = new MyClass(); 
myclass.mymethod(); 

或者在您的具體情況:

Profile profile = new Profile(browser); 
profile.edit_contact_info(); 
+1

這就是我所做的配置文件profileDriver =新的配置文件(Browsers.CHROME)
,當我指定方法myMethod = Profile.class.getMethod(testcase_Name.getStringCellValue()); myMethod.invoke(new Profile())它不起作用 – Vin

+0

@Vin好的,所以你試圖通過反射來調用方法,你知道哪種方法只在運行時調用,對嗎?你能發佈錯誤/異常嗎? – Aura

+1

如果我更改爲以下並嘗試我收到錯誤消息下面\t \t嘗試{ \t \t \t \t \t方法myMethod的= Profile.class.getMethod(testcase_Name.getStringCellValue())所列; \t \t \t \t \t //方法myMethod = ILMSSmoke.class.getMethod(testcase_Name.getStringCellValue()); \t \t \t \t \t //myMethod.invoke(ilms.Profile.class); \t \t \t \t \t myMethod.invoke(new Profile(null)); java.lang.NullPointerException java.lang.NoSuchMethodException:ilms.profile.Profile.edit_contact_info() – Vin

0

您可以使用Java反射動態執行的方法。

try { 
    Class<?> c = Class.forName(args[0]); 
    Object t = c.newInstance(); 

    Method[] allMethods = c.getDeclaredMethods(); 
    for (Method m : allMethods) { 
    String mname = m.getName(); 
    if (!mname.startsWith("test") 
     || (m.getGenericReturnType() != boolean.class)) { 
     continue; 
    } 
    Type[] pType = m.getGenericParameterTypes(); 
    if ((pType.length != 1) 
     || Locale.class.isAssignableFrom(pType[0].getClass())) { 
     continue; 
    } 

    out.format("invoking %s()%n", mname); 
    try { 
     m.setAccessible(true); 
     Object o = m.invoke(t, new Locale(args[1], args[2], args[3])); 
     out.format("%s() returned %b%n", mname, (Boolean) o); 

    // Handle any exceptions thrown by method to be invoked. 
    } catch (InvocationTargetException x) { 
     Throwable cause = x.getCause(); 
     err.format("invocation of %s failed: %s%n", 
       mname, cause.getMessage()); 
    } 
    } 

    // production code should handle these exceptions more gracefully 
} catch (ClassNotFoundException x) { 
    x.printStackTrace(); 
} catch (InstantiationException x) { 
    x.printStackTrace(); 
} catch (IllegalAccessException x) { 
    x.printStackTrace(); 
} 

來源:[https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html][1]

相關問題