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。你能建议一些解决方法吗?在第二段中,你是指静态和最终的吗?如果是,那么这也是正确的,但第一个是我真正想要的。