Java注释是否从中删除字符串文本?
我不确定这是不是一个像样的问题,但问题来了。我们正在尝试实现一个UI测试框架(SeleniumWeb驱动程序),并希望使用一个页面驱动的设计Java注释是否从中删除字符串文本?,java,annotations,Java,Annotations,我不确定这是不是一个像样的问题,但问题来了。我们正在尝试实现一个UI测试框架(SeleniumWeb驱动程序),并希望使用一个页面驱动的设计 class HomePage { @FindBy(how = How.Id, id="myPageHeaderID") private String pageHeader 在上面的简单示例中,我需要硬编码“myPageHeaderID”字符串文字。提出的要求之一是,出于维护原因(如果某些内容发生更改,则不部署代码)和国际化原因,我们能够从属性中提取“my
class HomePage {
@FindBy(how = How.Id, id="myPageHeaderID")
private String pageHeader
在上面的简单示例中,我需要硬编码“myPageHeaderID”字符串文字。提出的要求之一是,出于维护原因(如果某些内容发生更改,则不部署代码)和国际化原因,我们能够从属性中提取“myPageHeaderID”。我一直在四处搜索,可能没有进行适当的搜索,但有没有办法做到我上面所要求的?好的,您可以从注释中调用一个方法
@FindBy(how = How.Id, id=getProp())
private String pageHeader;
private String getProp()
{
String prop = //whatever way you want to get the value
return prop;
}
这不管用吗?我简单地走了这条路,但由于我们的应用程序,这不是很容易实现的(一旦你访问了一个页面,页面并不总是以相同的顺序显示) 然后,我在POJO中创建了公共小部件,并将它们注入到页面对象中,页面对象是这些小部件的集合 从那以后,我有了一个简单的测试工具,负责接收字符串(然后执行),基本上它允许用SpEL编写测试用例,并对注入的bean进行操作
这是一个我认为非常整洁的项目,但我不得不搁置它来完成其他一些事情。注释本质上是元数据。以数据库元数据为例,如果
Oracle
数据库将变成MySQL
,这将是一个奇怪的问题,对吗?下面是测试中关于注释转换器的部分NG
。我自己没有尝试过,但我认为它可以以某种方式实现。没有,因为大多数注释都会给您以下错误:注释属性******的值必须是一个常量表达式。或者,没有测试它。似乎唯一可以获得“动态参数”的方法注释上的属性必须是常量表达式。请检查此问题,此链接注释属性必须是常量表达式。因此,您将无法从外部资源加载ID。您可以使用需要常量键作为属性的注释,然后使用注释的工具将加载与h这是一个资源包中的密钥。@jbnize是的,常量表达式是我目前的路障。我一直在研究资源包的事情,但还没有发现任何有用的东西,有什么建议吗?否则,我将继续寻找。
public class PageElement implements WebElementAdapter, Locatable {
private How how;
private String using;
private boolean required;
@FindBy(how = How.ID_OR_NAME, using = DEFAULT_LOCATION_STRATEGY)
private WebElement backingElement;
public PageElement(How how, String using using) {
this.how = how;
this.using = using;
this.required = true;
}
/**
* This is how the overriding of the element location is done. I then injected
* these values in a spring configured bean file.
*
* This is needed on your config file:
* default-lazy-init="true" default-init-method="initialize">
*/
public final void initElement() {
if (backingElement == null || isStale() {
backingElement = getDriver().findElement(getLocationStrategy());
}
}
public By getLocationStrategy() {
By by = new ByIdOrName(using.replace(DEFAULT_LOCATION_STRATEGY, using));
switch(how) {
case CLASS_NAME:
by = By.className(using.replace(DEFAULT_LOCATION_STRATEGY, using));
break;
//Do for others
}
return by;
}
public WebElement getBackingElement() {
return backingElement;
}
}
public interface WebElementAdapter {
WebElement getBackingElement();
}
public interface Locatable {
By getLocationStrategy();
}