如何使用 Page factory 和 Selenium 来初始化函数

How to use Page factory along with Selenium to initialize the functions

我是一名学习者,也是 Java 的初学者。我正在学习创建一个自动化框架。我已经开始通过观看在线教程来构建框架。但是教程是用 C# 编写的,我试图在 Java 中构建它。所以,我被卡住了,无法弄清楚我的代码有什么问题。

这是我所指的 C# 代码:

 namespace DemoFramework
{
public static class Pages
        {
            private static T GetPage<T>() where T : new()
            {
                var page = new T();
                PageFactory.InitElements(Browser.Driver, page);
                return page;
            }

            public static AboutPage About
            {
                get { return GetPage<AboutPage>(); }
            }

            public static TopNavigationPage TopNavigation
            {
                get { return GetPage<TopNavigationPage>(); }
            }
}

这是我正在编写的 Java 代码:

 public class Pages {

        static WebDriver driver;

        private static Pages GetPage() {
            Pages page = new Pages();
            PageFactory.initElements(driver,page);
            return page;
        }

        public static AboutPage About {

            return return GetPage<AboutPage>();

        }
public static TopNavigationPage TopNavigationPage {

            return Pages.GetPage<TopNavigationPage>();

    }

你能帮我弄清楚如何解决这个问题吗?我不知道如何 return for ex。关于页面。

 public static AboutPage About {

        return GetPage<AboutPage>();

    }

下面是 java 中的基页对象示例:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;

public class BasePageObject {

    WebDriver driver;

    public BasePageObject(WebDriver driver) {

        this.driver = driver;
        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 15), this);

    }

}

这是一个特定页面对象的示例。 "helper" 引用是我拥有的一组辅助方法,并在我的原始基页对象中声明,但我在上面删除了,因为实现您的 selenium 包装器方法不是我想在这里展示的。只知道辅助方法通过异常处理和日志记录帮助包装 selenium 方法。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class MTSignOnPage extends BasePageObject {

    public MTSignOnPage(WebDriver driver) {
        super(driver);
    }

    @FindBy(xpath = "//img[contains(@src,'mast_signon')]")
    WebElement pageHeader;
    @FindBy(name = "userName")
    WebElement userName;
    @FindBy(name = "password")
    WebElement password;
    @FindBy(name = "login")
    WebElement submit;

    public boolean pageLoaded() {
        return helper.isDisplayed(pageHeader);
    }

    public void setUserName(String name) {
        helper.sendKeys(userName, name);
    }

    public void setPassword(String pword) {
        helper.sendKeys(password, pword);
    }

    public void clickSubmit() {
        helper.click(submit);
    }

}

最后,实现上述页面对象的代码片段:

以下代码使用了 JUnit 和 JBehave (BDD)

MTHeaderPage mtHeader;

@Given("I am on the Mercury Tours home page")
public void givenIAmOnTheMercuryToursHomePage() {
    driver.get("http://newtours.demoaut.com");
    helper.waitForPageToLoad();
    mtHeader = new MTHeaderPage(driver);
    if (driver.getTitle().equalsIgnoreCase("Welcome: Mercury Tours")) 
        test.logGivenPass("I am on the Mercury Tours home page");
    else {
        test.logGivenFail("I am on the Mercury Tours home page", 
                          "Current URL: " + driver.getCurrentUrl());
        fail();
    }
}

@When("I enter User Name <userName> and password <password>")
public void whenIEnterUserNameuserNameAndPasswordpassword(@Named("userName") String userName,
                                                          @Named("password") String password) {
    helper.waitForPageToLoad();
    mtHeader = new MTHeaderPage(driver);
    mtHeader.setUserName(userName);
    mtHeader.setPassword(password);
    test.logWhenPass("I enter User Name " + userName + " and password " + password);
}

@When("I click the sign-in link")
public void whenIClickTheSigninLink() {
    mtHeader.clickSignIn();
    test.logAndPass("I click the sign-in link");
}