简体   繁体   中英

How to pass one object to another

In my test class (Test.java) I create object variables: loginPage and homePage. In HomePage class I create Field object: emailField with value: "something" How can I get "emailField" value (and the entire object as well) inside HomePage class?

When i try to use emailField.getValue() or loginPage.emailField in getEmailValue() method I get errors: Cannot resolve symbol 'emailField'/Cannot resolve symbol 'loginPage'

Test.java:

public class Test extends GeneralTest {
    @Test
    public void test() {
        LoginPage loginPage = new LoginPage(driver);
        HomePage homePage = loginPage.logIn(loginPage);
        homePage.getEmailValue();
    }
}

HomePage.java:

public class LoginPage{
    private Field logInField = new Field(FieldType.INPUT, By.id("test1"));
    public Field emailField = new Field(FieldType.INPUT, By.id("test2"));
    private WebDriver driver;

    public LoginPage(WebDriver driver){
        this.driver = driver;
        emailField.setValue("something");
        getSite("https://apply.commonapp.org/login");
    }

    public HomePage logIn(Object object){
        //some actions
        driver.findElement(logInField.getSelector()).click();
        return new HomePage(driver);
    }
}

HomePage.class:

public class HomePage{
    private WebDriver driver;

    public HomePage(WebDriver driver){
        this.driver = driver;
    }

    public void getEmailValue(){
        // emailField.getValue() -> Cannot resolve symbol 'emailField'
        // loginPage.emailField -> Cannot resolve symbol 'loginPage'
    }
}a
How to pass one object to another

emailField is LoginPage class variable, you can access it via LoginPage object instance.

For passing objects to some classes the basic way is to set them in constructor. The same you've already done for driver.

public class HomePage{
    private WebDriver driver;
    private LoginPage loginPage;

    public HomePage(WebDriver driver, LoginPage loginPage){
        this.driver = driver;
        this.loginPage = loginPage;
    }

    // not sure what this method should do, but if it called get.. by naming conventions it should return something, so I changed it's type to Field and added return. But it's up to you, you may leave void, this is not related to your question.
    public Field getEmailValue(){
         return loginPage.emailField; // now this will work
    }
}

Do not forget to pass LoginPage object instance when instantiate HomePage.

public class LoginPage{
    private Field logInField = new Field(FieldType.INPUT, By.id("test1"));
    public Field emailField = new Field(FieldType.INPUT, By.id("test2"));
    private WebDriver driver;

    public LoginPage(WebDriver driver){
        this.driver = driver;
        emailField.setValue("something");
        getSite("https://apply.commonapp.org/login");
    }

    public HomePage logIn(Object object){
        //some actions
        driver.findElement(logInField.getSelector()).click();
        return new HomePage(driver, this); // this means current class instance
    }
}

Some tutorials

https://www.w3schools.com/java/java_constructors.asp http://tutorials.jenkov.com/java/constructors.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM