如何在注释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没有提供明显的好处。