Web-элементы дочернего класса, инициализированные в родительском классе с использованием PageFactory.initElements - PullRequest
0 голосов
/ 10 апреля 2020

Когда я использую PageFactory.initElements в родительском классе, элементы дочернего класса инициализируются. Как это работает?

public class PageBase {

    public PageBase(WebDriver dr)
    {
        this.dr=dr;
        PageFactory.initElements(dr, this);
    }
}

Здесь, в PageBase (родитель), 'this' является ссылкой на PageBase (родитель), верно? тогда как его инициализирующие элементы ниже дочернего класса? это из-за наследования [то есть что-то вроде дочернего класса также будет инициализировано с родителем]?

public class LoginPage extends PageBase{
    private WebDriver dr;
    public LoginPage(WebDriver dr)
    {
        super(dr);
        this.dr=dr;
        //PageFactory.initElements(dr, this);
    }
    @FindBy(how=How.ID,using="Bugzilla_login")
    WebElement weUserName;
    @FindBy(id="Bugzilla_password")
    WebElement wepassword;
    @FindBy(how=How.XPATH,using="//input[@id='log_in']")
    WebElement weLoginBtn;
} 

1 Ответ

0 голосов
/ 10 апреля 2020

this - ссылка на создаваемый дочерний экземпляр PageBase; this всегда ссылается на конкретный класс времени выполнения.

Мы можем доказать это на простом примере.

public class Main {
    public static void main(String... args) {
        Parent aParent = new Child("foo");
    }

    static class Parent {
        Parent(String someArg) {
            Factory.initElements(someArg, this);
        }
    }

    static class Factory {
        static void initElements(String someArg, Parent p) {
            System.out.println( "Parent object 'p' is an instance of class: " + p.getClass().getSimpleName() );
        }
    }

    static class Child extends Parent {
        Child(String someArg) {
            super(someArg);
        }
    }
}

Родительский объект 'p' является экземпляром класса: Child

Обратите внимание, что в зависимости от настроек среды IDE вы можете увидеть Утечка в предупреждении конструктора .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...