如何将此页面作为对象传递到pom中的下一页?

问题描述 投票:0回答:1

如何将此登录页面作为对象传递到页面对象模型中的下一页(即仪表板页面)?

我已经厌倦了回复声明,但它无法正常工作。

public class LoginPage {
    WebDriver driver;

    public void LPage(WebDriver driver) {

        this.driver=driver;
    }

    By UserName = By.id("username");
    By Password = By.id("pass");
    By Login = By.xpath("//*[@type='submit']");

    public WebElement un() {
        return driver.findElement(UserName);
    }

    public WebElement pwd() {
        return driver.findElement(Password);
    }

    public WebElement submit() {
         driver.findElement(Login).click();
        return submit();
    }
}

我需要将此LoginPage作为对象返回到DashBoard类,因此登录后将有一个程序的连续性流程。

java selenium testng pageobjects
1个回答
1
投票

在你的submit()函数中,你返回submit()函数,但它的返回类型是WebElement

如果您尝试将句柄传递到下一页,则必须返回该类型的对象并传递驱动程序句柄。

传递另一个页面对象:

submit()中的LoginPage方法更新为:

public DashboardPage submit(){
    driver.findElement(Login).click();
    return new DashboardPage(driver);
}

在测试中,将其称为:

@Test
public void test(){
    Webdriver driver = new Chromedriver();//For expample I'm using Chromedriver
    driver.get("YourTestAppilcationURL");
    LoginPage loginPage = new LoginPage(driver);
    loginPage.un.sendKeys("username");
    loginPage.pwd.sendKeys("password");
    DashboardPage dashboardPage = loginPage.submit();
//Now perform tasks in the dashboardPage
}

你可以在Selenium wiki上阅读它



在我看来,最好不要从页面对象动作类传递另一个页面对象。尝试在测试中启动页面对象并从那里使用它。

要做到这一点,不要从submit方法返回DashboardPage对象。

public void submit(){
    driver.findElement(Login).click();

然后在测试中使用它:

@Test
public void loginTest(Webdriver driver){
    LoginPage loginPage = new LoginPage(driver);
    DashboardPage dashboardPage = new DashboardPage(driver);
    loginPage.submit();
    Assert.AssertTrue(dashboardPage.isLoaded());
}
© www.soinside.com 2019 - 2024. All rights reserved.