【问题标题】:How to override findElements method so it returns list of type that implements WebElement interface如何覆盖 findElements 方法,使其返回实现 WebElement 接口的类型列表
【发布时间】:2021-04-17 09:42:59
【问题描述】:

有一个界面WebElement。

我想制作一个实现 WebElement 的包装器 UIElement。

我已经覆盖了所有方法。

但遇到了一个问题,即返回 ListfindElementS 方法。我尝试将返回类型更改为 List,但代码返回错误:“尝试使用不兼容的返回类型”。这对我来说很奇怪,因为重写 findElement 方法并将 UIElement 指定为返回类型不是问题。

这是我的方法,IDE 没有给出使用上面的错误:

List<UIElement> list = new ArrayList<>();
    for (WebElement el : this.element.findElements(by)) {
        UIElement uiElement = new UIElement(this.driver, el);
        list.add(uiElement);
    }
    return list;

这里是 UIElement 类和构造函数:

public class UIElement implements WebElement {
private final WebDriver driver;
private final WebElement element;
private final Actions actions;
private final JavascriptExecutor jsExecutor;
private final Waiter waiter;


public UIElement(WebDriver driver, By by) {
    this.driver = driver;
    this.element = this.driver.findElement(by);
    this.actions = new Actions(this.driver);
    this.jsExecutor = (JavascriptExecutor) this.driver;
    this.waiter = new Waiter(this.driver);
}

public UIElement(WebDriver driver, WebElement element) {
    this.driver = driver;
    this.element = element;
    this.actions = new Actions(this.driver);
    this.jsExecutor = (JavascriptExecutor) this.driver;
    this.waiter = new Waiter(this.driver);
}
}

【问题讨论】:

  • List&lt;UIElement&gt; list = new ArrayList&lt;&gt;();更改为List&lt;UIElement&gt; list = new ArrayList&lt;UIElement&gt;();
  • @pburgr 不,它没有帮助
  • 请阅读为什么a screenshot of code is a bad idea。粘贴代码并正确格式化。
  • 您想通过创建UIElement 来完成什么?在我看来,您正在将一堆与元素无关的东西塞入该包装器中。

标签: java selenium-webdriver wrapper


【解决方案1】:

无法在被覆盖的方法中将“Webelement 列表”更改为“UIElement 列表”。

您不能将 List 的泛型类型更改为该泛型类型的子类型。问题是对任何实例的引用都可以是该实例的子类型

更多详情请参考此链接-Stackoverflow

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2011-06-22
    • 2016-01-09
    • 1970-01-01
    • 2014-11-20
    相关资源
    最近更新 更多