java.lang.Exception:Test类应该只有一个公共零参数构造函数:

时间:2015-12-21 14:12:30

标签: java selenium-webdriver junit constructor expectations

我有一个类:Function Library我在构造函数中实例化webdriver实例,如下所示

public class FunctionLibrary {
    public WebDriver driver;

    public FunctionLibrary(WebDriver driver)
    {
        driver = new FirefoxDriver();
        this.driver=driver;
    }

    public WebDriver getDriver(){
        return this.driver;
    }
}

我正在访问扩展超类:函数库

的子类中的webdriver实例
public class Outlook extends FunctionLibrary{
    public Outlook(WebDriver driver) {
        super(driver);      
    }

    @Before
    public void testSetUp()
    {
        getDriver().navigate().to("https://google.com");
    }

    @After
    public void closeTest()
    {
        getDriver().close();
    }

    @Test
    public void openOutlookAndCountTheNumberOfMails()
    {
        System.out.println("executed @Test Annotation");        
    }
}

当我执行上面的junit代码时 我收到错误

  

java.lang.Exception:测试类应该只有一个公共零参数构造函数

任何人都可以让我在哪里出错

3 个答案:

答案 0 :(得分:3)

无需将参数传递给FunctionLibrary的ctor,因为您只需覆盖其值:

public class FunctionLibrary {
    public WebDriver driver;

    public FunctionLibrary()
    {
        this.driver=new FirefoxDriver();
    }

    // etc.
}

进行此更改意味着您不需要从测试类传递参数:只需删除其构造函数。

答案 1 :(得分:2)

你需要在课程顶部使用@RunWith(Parameterized.class)。

如果使用@Parameters正确,它将运行得很好。 :)

答案 2 :(得分:1)

您没有公共零参数构造函数。测试环境不知道要传递给它的构造函数,因为你需要传递WebDriver个对象。

public Outlook(WebDriver driver) {
    super(driver);
}

那里,您希望测试环境通过什么?而是做一些像保持零arg构造函数,并自己传递WebDriver实例。这样的事情应该有效。

public Outlook() {
    super(new FirefoxDriver());      
}

希望这有帮助。