Tag: pageobjects

如何在Selenium C#中使用PageFactory / FindsBy初始化SelectElements?

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

使用Selenium PageObject设计模式的最佳方法是什么

我正在使用Selenium 2 Web Driver和C#.Net创建测试。 在阅读了很多Selenium文档之后,我仍然不确定如何使用PageObject设计模式进行测试。 许多selenium示例仅在Java中显示,并且.Net的API绑定并不总是与人们认为的相似,这是由于某些语言设置的限制和标准。 在.Net Selenium Web Driver中将PageObject设计模式与PageFactory一起使用的最佳方法是什么? 最终,我希望我的PageObjects能够处理更多function,而不是使用PageObject IWebElements进行NUnit测试。 下面是我目前将如何创建我的测试的示例。 public class LoginPage { private IWebDriver webDriver; [FindsBy(How = How.Id, Using = “ctl00_ctl00_ctl00_insideForm_insideForm_content_txtPassword”)] public IWebElement Password { get; set; } [FindsBy(How = How.Id, Using = “ctl00_ctl00_ctl00_insideForm_insideForm_content_cmdSubmit”)] public IWebElement SubmitButton { get; set; } [FindsBy(How = How.Id, Using = “ctl00_ctl00_ctl00_insideForm_insideForm_content_txtUserName”)] public IWebElement UserName […]