如何在注释FindsBy中使用非静态值?

时间:2017-10-19 19:20:19

标签: c# selenium-webdriver annotations pageobjects

我试图使用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 + ")")));
        }
    }

1 个答案:

答案 0 :(得分:0)

你不能这样做。属性是并且必须在编译时完全定义,而不是在运行时。这就是C#语言的工作方式。它是设计的;使用属性没有解决方法。幸运的是,页面对象模型不依赖于使用PageFactory实现。使用PageFactory与填充页面对象的其他方法相比没有任何明显的好处。