我正在使用PageFactory在Selenium WebDriver中为C#构建一个页面对象模型.
不幸的是,我发现FindsByAttribute不会初始化SelectElement(HTML <select>标签/下拉菜单).到目前为止,我已经碰巧或提出了一些想法来解决它,但它们都不是理想的:
PageFactory和FindsByAttribute是sealed的,所以我不能只继承那些它强制.SelectElement来自IWebElement在每个方法是相当混乱和重复的.它也忽略了明显的内置等待PageFactory和抛出NoSuchElementExceptions,除非我每次都添加一个等待 - 这需要在整个地方重复定位器,从而击败(部分)POM的目的.IWebElement属性包装每个属性SelectElement不那么混乱,但仍然具有与上面相同的等待问题.到目前为止,最好的选择是#3,为此编写一个包装SelectElement只会为每个方法添加一个等待.虽然这个解决方案可行,但它会大量增加每个页面的代码,而不是这个(假设的)漂亮的代码:
[FindsBy(How = How.Id, Using = "MonthDropdown")]
public SelectElement MonthDropdown;
Run Code Online (Sandbox Code Playgroud)
我坚持使用包装器包装(我宁愿避免使用),并且:
[FindsBy(How = How.Id, Using = "MonthDropdown")]
private IWebElement _monthDropdown;
public Selector MonthDropdown
{
get { return new Selector(MonthDropdown, Wait); }
}
Run Code Online (Sandbox Code Playgroud)
随着Selector作为SelectElement包装,也必须采取的IWait<IWebDriver>,因此它可以等待,和一个新的实例Selector访问它的每一次.
有没有更好的方法呢?
编辑:瞌睡放入错误的访问修饰符.固定.谢谢,@ JimEvans.