我有一个这样的课
父类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
方法
因为这样做。这个类正在扩展另一个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
?
答案 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。