【问题标题】:Passing parameters in @FindBy Page factory在@FindBy 页面工厂中传递参数
【发布时间】:2019-10-01 19:03:16
【问题描述】:

有什么方法可以参数化我们传递的字符串以使用页面工厂创建页面对象?

例如:

String v = "password";
@FindBy(name=v)
private WebElementFacade password_Field;

我正在尝试将字符串 v 推送到 @FindBy 中,但出现错误。

我得到 注释属性 FindBy.name 的值必须是常量表达式。

【问题讨论】:

  • 在您的问题中添加异常堆栈跟踪。
  • 如果您使用 final 关键字声明变量 v,应该可以工作。
  • 我同意如果我们使用 final 关键字,它会起作用。但我希望 v 的值应该是可变的。有没有办法。
  • 注解值在编译时必须是可解析的。需要是原语或字符串。即使您输入 final 关键字,它甚至也不能是引用属性文件的东西,因为它将在运行时解析。

标签: selenium selenium-webdriver cucumber serenity-bdd


【解决方案1】:

是的。有可能的。请在下面找到解决方案:

在您的Page 中,不要使用@FindBy,而是使用Pagefind 方法获取WebElementFacade,然后将其用于操作。

例如:如果你需要在一个元素上click,请看下面的代码:

public void click(String elementId) {
    WebElementFacade element = find(ById.id(elementId));
    element.click();
}

这对我来说非常有效。并且元素 id 一直来自 .story 示例。

【讨论】:

    【解决方案2】:

    不,很遗憾,无法将参数发送到注释(参考)。由于 Java 注释不允许动态参数化。编译器在编译时评估注释元数据。所以,它必须存在。虽然有解决这个问题的方法。 检查这个-Java Annotations values provided in dynamic manner

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多