Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 @findby注释可以在Selenium接口中使用吗_Java_Selenium_Findby - Fatal编程技术网

Java @findby注释可以在Selenium接口中使用吗

Java @findby注释可以在Selenium接口中使用吗,java,selenium,findby,Java,Selenium,Findby,让我们看看下面的代码: public interface HomePageObjects { @FindBy(xpath = "//*[@class='_2zrpKA']") WebElement UsernameField ; @FindBy(xpath = "//*[@class='_2zrpKA _3v41xv']") WebElement PswdField ; } public class HomePageTests implements Hom

让我们看看下面的代码:

public interface HomePageObjects {

    @FindBy(xpath = "//*[@class='_2zrpKA']")
    WebElement UsernameField ;

    @FindBy(xpath = "//*[@class='_2zrpKA _3v41xv']")
    WebElement PswdField ;

}

public class HomePageTests implements HomePageObjects {

    WebDriver Driver;

    @BeforeClass
    public void initpage() {
        Driver = LaunchBrowser.Driver;
        PageFactory.initElements(Driver, this); 
        System.out.println(UsernameField + " " + Driver);
    }

}
此代码编译得很好,但无法初始化webelements,有人对此有解释吗?

的源代码,请检查
initElements
方法

public static void initElements(FieldDecorator decorator, Object page) {
    Class<?> proxyIn = page.getClass();
    while (proxyIn != Object.class) {
      proxyFields(decorator, page, proxyIn);
      proxyIn = proxyIn.getSuperclass();
    }
  }
publicstaticvoidinitelements(FieldDecorator-decorator,Object页){
类proxyIn=page.getClass();
while(proxyIn!=Object.class){
代理字段(装饰符、页面、代理);
proxyIn=proxyIn.getSuperclass();
}
}
proxyIn.getSuperclass()
返回忽略接口的pageobject的超类。因此,在您的例子中,它从
HomePageTests.class
Object.class
。因此,界面中的webelements将保持未初始化状态。
您可以考虑改用抽象类来存储状态,这是一个更好的主意。

在Java中,声明为接口成员的字段是隐式的
静态的
最终的
。因此,这些成员不是对象实例的一部分,因此
PageFactory.initElements
不会初始化它们


同样的情况也应该发生在不使用接口的情况下-静态成员上的所有
@findBy
注释都将被忽略。

谢谢,我也有类似的想法。尽管如此,创建pageobject接口的原因是为了实现尽可能多的pageobject。我想在不指定类名的情况下访问webelement。你能建议一些解决方法吗?在第二段中,你是指静态和最终的吗?如果是,那么这也是正确的,但第一个是我真正想要的。