我移植了一个现有的项目,我有一个名为DetailPage
的超类,这是我唯一可以更改/编辑的东西。这是一个硒测试项目,在以前的版本中,我有数百个单独的页面扩展DetailPage
并且有以下几行:
@FindBy(id="someID")
private WebElement someIDBox;
在页面中搜索给定的id并将该元素分配给变量。我现在有一个nonW3C
的类似网站,所以我不需要id
查找,而是通过name
查找,即:
@FindBy(name="someID")
private WebElement someIDBox;
是我现在想要的。
所以我的问题是我如何(如果可能的话)在DetailPage中创建一个超级函数,它会注意到我说id
并覆盖name
?
我不想要一个只在单个页面中用id
替换文本name
的函数,因为我需要保留它们。
答案 0 :(得分:1)
这不符合我提出的标准但是感谢@guy我被介绍给ByIdOrName,这有助于解决我的问题。所以我制作了一个小脚本,遍历工作区中的所有文件并替换
@FindBy(id="someID")
private WebElement someIDBox;
与
@FindBy(how = How.ID_OR_NAME, using="someID")
private WebElement someIDBox;
虽然这样做了所以我不得不改变所有测试页面(这是我想避免的),它不会改变其他网站的其他测试工作方式,这是关键!
答案 1 :(得分:0)
此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);
}
}
}
请注意我自己没有尝试过。希望它有所帮助。