如何为页面中的框架实现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添加了必需类的示例。
非常感谢您提供的代码。.现在,我对如何进行此操作有了一个主意。