我试图使用POM将我的定位器的整个定义从标准格式转换为注释FindsBy。但是我有一些定位器,它们由非静态变量组成,并且我收到错误消息:“无法在静态上下文中访问非静态字段_createBookData”。
代码,我想得到:
[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 + ")")));
}
}
答案 0 :(得分:0)
你不能这样做。属性是并且必须在编译时完全定义,而不是在运行时。这就是C#语言的工作方式。它是设计的;使用属性没有解决方法。幸运的是,页面对象模型不依赖于使用PageFactory
实现。使用PageFactory
与填充页面对象的其他方法相比没有任何明显的好处。