java中 page,关于java:为页面中的框架实现PageObjects模式

如何为页面中的框架实现pageObject模式(硒)。我有一个主页,有一个左框架和一个右框架,我想为每个框架创建页面对象。

例如,我有LeftFrame页面对象,如下所示:

Public Class HomePageLeftFrame{

private WebElement link;

private WebElement textField;

}

如何为HomePageLeftFrame对象中的两个元素编写@FindBy批注...有办法吗?

注意:根据pageObjects硒的文档,提到页面对象可以是整个HTML页面或页面的一部分。对于上述实现,我的理解正确吗?

我认为linkinLeftFrame和textFieldLeftFrame也可以是页面对象,因为它们内部还有其他元素。

在开始提出建议之前,我想分享一下我为其开发了POM框架的应用程序。因此,基本上我的应用程序的每个html页面都有三个不同的框架:

顶部框架:它是整个应用程序的共享视图,其中包含注销,帮助,管理设置等常用功能。

左侧导航面板:在我的应用程序中的大多数地方,此框都可用,并且可以在应用程序的不同部分之间进行导航。

内容框架:这是用户进行主要操作的框架。

为此类应用程序设计基于Page Object的框架确实是一项繁琐的工作,但是我决定以一种方式设计它,以便避免所有重复的代码。首先,我将共享框架结构:

org.xyz.automation.sdk

- TopFrame.java

- MainNavigator.java

- WebDriverFactory.java

- Configuration.java

org.xyz.automation.sdk.global.pages

- LoginPage.java

- TopFrame.java

org.xyz.automation.sdk.global

- Navigator.java

org.xyz.automation.sdk.leftpanel.pages

- LeftFramePage.java

org.xyz.automation.sdk.leftpanel

- LeftFrameNavigator.java

因此,基本上org.xyz.automation.sdk包含所有常见的配置类,这些类负责根据系统配置实例化Web驱动程序。

org.xyz.automation.sdk.global.pages:此包包含常见视图的页面对象类,因为我已经说过TopFrame是可以在整个应用程序中看到的东西,因此我在TopFrame.java中对该视图进行了建模。为了将帧导航与Page对象类隔离,放在单独的包中,该包不过是Page Object类的父包。

org.xyz.automation.sdk.global包含Navigation.java,它负责帧导航和所有其他导航。将其与global.pages隔离的唯一好处是,将来当您的应用程序不支持框架时,您无需更改任何东西Page类,只需修改导航器类。

org.xyz.automation.sdk.leftpanel.pages:类似于以上内容,该程序包包含左侧面板的页面对象java类,我再次从leftpanel.pages程序包中分离出该左侧面板的导航。

@FindBy

这只是找到建模页面的Web元素的快捷方式。页面对象的最基本概念是每个类仅应对单个视图建模,因此建模类应仅包含实际出现在建模视图上的网络元素。例如TopFrame.java应该包含注销元素,因为它仅出现在该框架上。

@FindBy(name ="logOut") // To find the element by name

@CacheLookup

private WebElement logOutLInk;

并且在对其执行任何操作时,应将其视为WebElement的实例。

logOutLInk.click();

/**

* Class which models the view of Left Navigation Frame

*/

public class LeftNavigationFrame{

@FindBy(name="exampleName")

private WebElement exampleButton;

private WebDriver driver;

public LeftNavigationFrame(WebDriver driver) {

this.driver = driver;

}

/**

* Opens a new page by clicking example button

*/

public void openNewPage() {

exampleButton.click();

}

}

Navigator类的示例:

/**

* Class which provides convenient methods to navigate on left frame

*/

public class LeftFrameNavigator{

private WebDriver driver;

public LeftFrameNavigator(WebDriver driver) {

this.driver = driver;

}

/**

* Changes scope to the left frame

*

* @return Page Object class of LeftNavigationFrame

*/

public LeftNavigationFrame switchToLeftFrame() {

// Code to switch Frame

return new LeftNavigationFrame(driver);

}

}

这是您的测试课程的示例:

/**

* Class which contains test cases of xyz

*/

public class doTesting{

LeftFrameNavigator leftNav;

@BeforeTest

public void instantiateRequiredClasses() {

LeftFrameNavigator leftNav = new LeftFrameNavigator();

}

@Test

public void doTestingHere() {

LeftNavigationFrame leftFrame = leftNav.switchToLeftFrame();

leftFrame.openNewPage()

}

}

}

priyanshu,感谢您的详细答复和时间。 您能否告诉我如何在LeftFramePage中初始化元素,还可以让我对类LeftFrameNavigator有所了解? 我仍然不清楚如何继续进行我的项目。.您可以显示的任何代码都受到高度赞赏..非常感谢..

@javanoob添加了必需类的示例。

非常感谢您提供的代码。.现在,我对如何进行此操作有了一个主意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值