Java重写现有的类方法

Java重写现有的类方法,java,internet-explorer,selenium,junit,Java,Internet Explorer,Selenium,Junit,我有一个稍微复杂的问题 目前的情况是,我正在从事一个基于selenium的JUnit的自动化项目。为此,我编写了一个testsuite和一个abstractTestclass(作为几个TestClass的基础)。我还尝试构建我的项目,以便必须实现测试用例的程序员只需将它们记录在selenium IDE中并导出到JUnit测试类。为了达到这个目标,需要进行一些更改,因为抛出的selenium java代码和标准selenium包的一些方法和函数有一些小错误。。。就像IE有时不点击一样。。。 为了避

我有一个稍微复杂的问题

目前的情况是,我正在从事一个基于selenium的JUnit的自动化项目。为此,我编写了一个testsuite和一个abstractTestclass(作为几个TestClass的基础)。我还尝试构建我的项目,以便必须实现测试用例的程序员只需将它们记录在selenium IDE中并导出到JUnit测试类。为了达到这个目标,需要进行一些更改,因为抛出的selenium java代码和标准selenium包的一些方法和函数有一些小错误。。。就像IE有时不点击一样。。。 为了避免这些错误,我重写了FFDriver和IEDriver类,尤其是“findElement”方法。那很好

但现在我遇到了一个新问题。这是已知的问题,IE有时不点击非显示元素。我还有一个变通方法(使用Javascript命令而不是click()。但是,当我考虑如何实现时,我想这样做,就像我通过重写驱动程序类解决的问题一样,我开始重写RemoteWebElement类

问题来了。如果我重写RemoteWebElement类以重写click()方法,我必须在整个项目中使用新的RemoteWebElement2_0类,而不是标准类。乍一看,这并不像看上去的那么糟糕(就像我必须对驱动程序类做同样的事情一样)。但后来我意识到我的findElement方法提供的是RemoteWebElement,而不是RemoteWebElement2\u 0。我认为没有机会更改findElement方法来交付我的RemoteWebElement2_0,并且不可能进行向下广播

我有以下解决此问题的想法,但不知道如何实施,甚至不知道是否可以实施:

  • 1.)直接重写原始的RemoteWebElement类(应该可以,但如何实现?)
  • 2.)避免在findElement方法中返回正常的RemoteWebElement
  • 3.)将selenium IDE修改为不使用click()方法,而是使用costum实现
  • 4.)使用另一种解决方法使用click()方法解决问题
  • 5.)不可能向下投射
有人能帮我吗?我知道这有点奇怪,但请试着理解我,不要问你是否不知道

这是我的密码:

IEDriver类-->

RemoteWebDriver2\u 0类-->

如果你需要更多的代码,请索取


向上谢谢

我不是selenium方面的专家,但您可以做的是返回原始
RemoteWebElement的包装器

在您的
InternetExplorerDriver2\u 0
覆盖方法中

  @Override
    public RemoteWebElement findElement(By by) {
      RemoteWebElement originalElement = super.findElement(by);
      if (originalElement == null){
      return null;
      }
      return new RemoteWebElementWrapper(originalElement);
    }
现在创建包装类,并覆盖来自超类的所有方法,如下面的示例所示

public class RemoteWebElementWrapper extends RemoteWebElement {

    private final RemoteWebElement instance;
    public RemoteWebElementWrapper(RemoteWebElement instance) {
        super();
        this.instance = instance;
    }
@Override
List<WebElement> findElementsByLinkText(String using){
return instance.findElementsByLinkText(using)
}
@Override
List<WebElement> findElementsByName(String using){
instance.findElementsByName(using)
}
@Override
List<WebElement>    findElementsByPartialLinkText(String using){
instance.findElementsByPartialLinkText(using)
}
//etc
}
公共类RemoteWebElementWrapper扩展了RemoteWebElement{
私有最终RemoteWebElement实例;
公共RemoteWebElementWrapper(RemoteWebElement实例){
超级();
this.instance=instance;
}
@凌驾
列出findElementsByLinkText(使用字符串){
return instance.findElementsByLinkText(使用)
}
@凌驾
列出findElementsByName(使用字符串){
instance.findElementsByName(使用)
}
@凌驾
列出findElementsByPartialLinkText(使用字符串){
instance.findElementsByPartialLinkText(使用)
}
//等
}

make your
RemoteWebElement 2\u 0
保存原始
RemoteWebElement
对象的实例,并委托所有方法(除了单击要覆盖的方法)很抱歉,我听不懂您的意思,您的意思是什么?多亏了您,这个解决方案对我很有效。这有点复杂,但它可以工作!:)
  @Override
    public RemoteWebElement findElement(By by) {
      RemoteWebElement originalElement = super.findElement(by);
      if (originalElement == null){
      return null;
      }
      return new RemoteWebElementWrapper(originalElement);
    }
public class RemoteWebElementWrapper extends RemoteWebElement {

    private final RemoteWebElement instance;
    public RemoteWebElementWrapper(RemoteWebElement instance) {
        super();
        this.instance = instance;
    }
@Override
List<WebElement> findElementsByLinkText(String using){
return instance.findElementsByLinkText(using)
}
@Override
List<WebElement> findElementsByName(String using){
instance.findElementsByName(using)
}
@Override
List<WebElement>    findElementsByPartialLinkText(String using){
instance.findElementsByPartialLinkText(using)
}
//etc
}