如何在注释FindsBy中使用非静态值?
问题描述:
我试图将我的定位器的全部定义从标准格式转换为使用POM标注FindsBy。但我有一些定位器,它包含非静态变量,我收到错误消息:“无法在静态上下文中访问非静态字段_createBookData”。如何在注释FindsBy中使用非静态值?
代码,我想:
[FindsBy(How = How.CssSelector, Using ="#select-month > option:nth-child(" + _createBookData.NumberMonth + ")") ] private IWebElement BirthmonthDropItem;
,而不是验证码:
private IWebElement BirthmonthDropItem
{
get
{
return _waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("#select-month > option:nth-child(" + _createBookData.NumberMonth + ")")));
}
}
答
你不能做到这一点。属性是并且必须在编译时完全定义,而不是在运行时。这只是C#语言的工作方式。它是设计的;没有解决方法来执行此属性。幸运的是,页面对象模型不依赖于使用PageFactory
实现。与其他填充页面对象的方法相比,使用PageFactory
没有提供明显的好处。