如何使用 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");
}
我是一名学习者,也是 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");
}