Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java注释是否从中删除字符串文本?_Java_Annotations - Fatal编程技术网

Java注释是否从中删除字符串文本?

Java注释是否从中删除字符串文本?,java,annotations,Java,Annotations,我不确定这是不是一个像样的问题,但问题来了。我们正在尝试实现一个UI测试框架(SeleniumWeb驱动程序),并希望使用一个页面驱动的设计 class HomePage { @FindBy(how = How.Id, id="myPageHeaderID") private String pageHeader 在上面的简单示例中,我需要硬编码“myPageHeaderID”字符串文字。提出的要求之一是,出于维护原因(如果某些内容发生更改,则不部署代码)和国际化原因,我们能够从属性中提取“my

我不确定这是不是一个像样的问题,但问题来了。我们正在尝试实现一个UI测试框架(SeleniumWeb驱动程序),并希望使用一个页面驱动的设计

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();
}