如何将Page Factory和Selenium一起使用来初始化功能

时间:2018-09-24 13:09:42

标签: java page-factory

我是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>();

    }

您能帮我弄清楚如何解决此问题。我无法获得退货的方法。 AboutPage。

 public static AboutPage About {

        return GetPage<AboutPage>();

    }

1 个答案:

答案 0 :(得分:1)

这是java中的基础页对象的示例:

b c + a d

这是特定页面对象的示例。 “帮助程序”引用是我拥有的一组帮助程序方法,它们在我的原始基础页对象中声明,但是由于实现了selenium wrapper方法并不是我想要在此处显示的内容,因此我在上文中删除了它们。只是知道,辅助方法有助于使用异常处理和日志记录来包装硒方法。

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);

    }

}

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

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

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);
    }

}
相关问题