java - 可以覆盖@FindBy 的父类(super class)

标签 java selenium superclass

我正在移植一个现有项目,我有一个名为 DetailPage 的父类(super class),这是我唯一可以更改/编辑的东西。这是一个 selenium 测试项目,在以前的版本中,我有数百个单独的页面,这些页面扩展了 DetailPage 并具有以下几行:

@FindBy(id="someID")
private WebElement someIDBox;

在页面中搜索给定的 id 并将该元素分配给变量。我现在有一个类似的 nonW3C 网站,所以我现在需要通过 name 查找,而不是通过 id 查找,即:

@FindBy(name="someID")
private WebElement someIDBox;

是我现在想要的。

所以我的问题是如何(如果可能的话)在 DetailPage 中创建一个父类(super class)函数,它会注意到我说的是 id 并用 name 覆盖?

我不想要一个只用 name 替换单个页面中的文本 id 的函数,因为我需要保留它们。

最佳答案

作者article扩展了“FindBy”注释来支持他的需求。您可以使用它来覆盖“FindBy”并进行实现。

编辑后的代码示例:

private static class CustomFindByAnnotations extends Annotations {

    protected By buildByFromLongFindBy(FindBy findBy) {
        How how = findBy.how();
        String using = findBy.using();

        switch (how) {
            case CLASS_NAME:
                return By.className(using);
            case ID:
                return By.id(using); // By.name(using); in your case
            case ID_OR_NAME:
                return new ByIdOrName(using);
            case LINK_TEXT:
                return By.linkText(using);
            case NAME:
                return By.name(using);
            case PARTIAL_LINK_TEXT:
                return By.partialLinkText(using);
            case TAG_NAME:
                return By.tagName(using);
            case XPATH:
                return By.xpath(using);
            default:
                throw new IllegalArgumentException("Cannot determine how to locate element " + field);
        }
    }
}

请注意,我自己没有尝试过。希望对您有所帮助。

关于java - 可以覆盖@FindBy 的父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34682451/

相关文章:

java - 使用 JodaTime 添加月份?

python Selenium : can't figure out xpath to clickable link element in span tag

java - 构造函数重载 - Java 最佳实践

java - Java 中 Class 类型的可变参数

java - 在selenium中打开浏览器时出现异常

java - 当子类对象传递给带有父类(super class)参数的方法时会发生什么?

java - 如何在Java中找到Integer(Generic)的模块

java - 从线程更新进度条时,SWT 窗口变得无响应

java - Nashorn 和 ClassFilter

windows - 如何获取弹出窗口的句柄(WebdriverIO)