【问题标题】:selenium: override setUp method in super class and call super super methodselenium:覆盖超类中的setUp方法并调用超超方法
【发布时间】:2014-09-19 17:44:25
【问题描述】:

我的 SuperTest 课程中有一个 setUp()。现在在我的 ChildTest 类中,我想设置另一个 setUp()。这一项将专门为 ChildTest 运行。

所以我现在有这个

    //SuperClass
    protected void setUp(ITestContext context) {
        ...
    }

    //SubClass extends SuperClass
    @BeforeMethod
    protected void setUp(ITestContext context) {
        super.setUp(context);
        ...
    }

    //ChildClass extends SubClass
    @Override
    @BeforeMethod
    protected void setUp(ITestContext context) {
        super.setUp(context);
        ...
    }

问题是,当我运行 ChildTest 时,它同时运行来自 SubClass 的 setUp() 和它自己的...我怎样才能得到它,所以它只会运行它自己的 setUp()?

【问题讨论】:

  • @olyv 是的,我愿意(忘记包含标签)。

标签: java selenium selenium-webdriver testng


【解决方案1】:

不,它不应该同时运行两种设置方法,如果您扩展了父类并遵循overriding 方法的所有规则,那么您的父类方法将不会被执行。考虑以下场景。我有两个以 Abc 作为父类和 Def 作为子类的 TestNG 类

public class Abc{

@BeforeMethod
public void beforeMethod(ITestContext context) {
    System.out.println("PARENT");
}

}

public class Def extends Abc{

@BeforeMethod
public void beforeMethod(ITestContext context) {
    System.out.println("CHILD");
}

@Test
public void test(){
    System.out.println("TEST");
}

}

现在如果我将 Def 类作为 TestNg 测试执行,它肯定会执行子类的 beforeMethod,然后执行子类的测试方法

【讨论】:

  • 但它确实同时运行。我必须注释掉子类的超类setUp 才能运行它自己的setUp。我也做了你所做的并在控制台上打印出来,它清楚地显示了“超级”和“孩子”
  • 我无法弄清楚你错过了什么,但是当我执行上述场景时,它会打印:儿童然后测试
【解决方案2】:

参考这个答案:https://stackoverflow.com/a/3456599

我最终在 SubClass 中添加了一个调用 SuperClass 的 setUp 的方法

    //SubClass extends SuperClass
    protected void getSuperSuper((ITestContext context) {
        super.setUp(context);
    }

    //ChildClass extends SubClass
    protected void setUp(ITestContext context) {
        super.getSuperSuper(context);
        ...
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多