【问题标题】:Which is the better way to create instance of PageObject?哪个是创建 PageObject 实例的更好方法?
【发布时间】:2015-03-20 22:40:50
【问题描述】:

我想从下面知道哪个是创建 PageObject 类实例的更好选择(例如:LoginPage):-

1) 在所有测试和步骤中创建一个 Pageobject 类的实例(需要时)?

LoginPage loginpage = PageFactory.initElements(webDriver, LoginPage.class);

(或)

2) 使用静态方法创建一个类,以返回请求的 PageObject 类的实例。在此方法中,在为请求的类创建新实例之前检查实例是否为空?

LoginPage loginpage = PageUtil.getPageObject("login");

请指教。

【问题讨论】:

    标签: java selenium-webdriver webdriver cucumber-jvm pageobjects


    【解决方案1】:

    有多种方法可以做到这一点。我喜欢创建一个BaseClass() 并在那里实例化PageFactory.initElements(driver, this);。见我的gist。另外,公共存储库here

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.support.PageFactory;
    
    /**
    * Created by Saifur on 2/14/2015.
    */
    public class BaseClass {
    
    //global driver instance.
    WebDriver driver;
    
    //super constructor
    public BaseClass(WebDriver _driver)
     {
       //assigning driver instance globally.
       driver = _driver;
    
       /*Instantiating all elements since this is super class
       and inherited by each and every page object */
    
       PageFactory.initElements(driver, this);
     }
    }
    

    【讨论】:

    • 感谢您的回复。在同一个测试中为同一个 PageObject 类创建多个类会对性能产生影响吗?
    • @user3188928 我不知道。但是,很多人倾向于为单个页面创建一个类,这样可维护性更容易。但你当然可以拥有不止一个。如果这是一直在寻找的,请接受答案
    • 抱歉我打错了。我的意思是在同一个测试中为同一个 PageObject 类创建多个类?
    • 并非如此。无论如何,您都需要在一个测试中实例化多个类以满足测试的需要
    • 是的。但是可以多次实例化同一个类吗?我正在使用 cucumber-webdriver-junit 进行自动化。对于大多数场景,步骤实现位于不同的文件中,并且某些步骤需要访问同一个 PageObject 类。除了我在问题中提到的选项 (2) 之外,还有其他方法可以使用 PageOBject 类的相同实例吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2013-07-21
    • 2018-07-26
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多