【问题标题】:How to define a @findBy annotation in a subclass, using PageFactory?如何使用 PageFactory 在子类中定义 @findBy 注释?
【发布时间】:2019-06-19 22:35:30
【问题描述】:

我在一个使用 Selenium 和 C# 的自动化项目中工作。 我使用页面对象模式来定义每个页面(及其定位器),然后在 Test 类中分别定义测试。 我有一个 Page 类,它是页面的基类,我在其中调用: PageFactory.InitElements(webDriver, this);

并定义所有页面的通用方法。 然后每个页面都继承自Page,使用@FindBy注解定义对应的元素:

[FindsBy (How = How.Id, Using = "UserName")]
public IWebElement UserName {get; set; }

[FindsBy(How = How.Id, Using = "UserPass")]
public IWebElement Password { get; set; }

[FindsBy(How = How.Id, Using = "login-btn")]
public IWebElement SubmitButton { get; set; }

添加了一个新的登录页面,我必须同时保留(新登录和旧登录),并且能够使用这两个页面运行测试。 两个页面都有相同的元素(不是定位器),并且它们必须能够响应相同的方法,例如:登录(用户,密码) 想法是定义类的层次结构:BaseLogin(继承自 Page)、LoginPage 和 NewLoginPage(都继承自 BaseLogin),在 BaseLogin 中您可以定义元素 (IWebElement) 和常用方法。 然后在每个子类中将每个元素与相应的定位器关联/关联。

这是为了避免在每个页面上重复允许我与页面交互的代码。

public class BaseLoginPage : Page
{
 protected IWebElement UserName { get; set; }
 protected IWebElement Password { get; set; }
 protected IWebElement SubmitButton { get; set; }
}
    // BaseLogin just define the IWebElement without assign a specific locator.

如何将元素“IWebElement UserName”与其对应的定位器关联/关联?

[FindsBy(How = How.Id, Using = "UserName")]   --> in LoginPage Class
[FindsBy(How = How.Id, Using = "user")]       --> in NewLoginPage Class

【问题讨论】:

    标签: c# selenium findby page-factory


    【解决方案1】:

    使用 or 运算符怎么样?如果两者的登录名相同,则只会将值发送到页面上的任何定位器。

     [FindsBy(How = How.Id, Using = "user | UserName")]
    

    或 XPath

     [FindsBy(How = How.XPath, Using = "//input[@id='user'] | //input[@id='UserName']")]  
    

    【讨论】:

    • 感谢@Dazed 的回复。我认为它可以解决我的问题,但是按照您的方法,当一个页面中的 ID 引用相同的 IWebElement 并且另一个页面中的 CssSselector 引用相同的 IWebElement 时,我该怎么办?示例:[FindsBy(How = How.CssSelector, Using = ".dp-button")] public IWebElement SubmitButton [FindsBy(How = How.Id, Using = "login-btn")] public IWebElement SubmitButton
    • 会是这样吗? [FindsBy(How = How.CssSelector | How.Id, Using = ".dp-button | login-btn")] 如果有人可以帮助我,我真的很感激 :)
    • 为什么需要两个不同的定位器呢? XPath 或 CSS 都可以找到。
    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2013-05-06
    • 2018-07-19
    • 2023-03-28
    • 1970-01-01
    • 2012-02-20
    • 2018-05-31
    • 2021-12-28
    相关资源
    最近更新 更多