如何为页面中的框架实现pageObject模式(Selenium)。我有一个主页,有一个左框架和一个右框架,我想为每个框架创建页面对象。
例如,我的LeftFrame页面对象如下所示:
Public Class HomePageLeftFrame{
private WebElement link;
private WebElement textField;
}如何为HomePageLeftFrame object...Is中的两个元素编写@FindBy注释?
注释:,根据selenium for pageObjects的文档,可以提到页面对象可以是整个pageObjects页面或page..Is的一部分,对上述实现的理解是正确的吗??
发布于 2014-09-09 05:21:13
在编写我的建议之前,我想分享一下我开发了POM框架的应用程序。因此,基本上,我的应用程序对于每个html页面有三个不同的框架:
为这种类型的应用程序设计基于页面对象的框架确实是一项繁琐的工作,但我决定以这样一种方式来设计它,这样我们就可以避免所有重复的code.First --我将共享框架结构:
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.To中建模了这个视图--将框架导航与parent类隔离开来,我将它保存在一个单独的包中,它只不过是parent类的父包。
org.xyz.automation.sdk.global包含负责帧导航和所有其他导航的Navigation.java。不受global.pages影响的唯一好处是,将来当应用程序不支持框架时,不需要更改任何内容页面类,只修改导航器类。
org.xyz.automation.sdk.leftpanel.pages:与上面类似,这个包包含页面对象、左面板的java类,我再次将这个左面板的导航从leftpanel.pages包中分离出来。
@FindBy,这只不过是查找建模页面的web元素的快捷方式。页面对象的基本概念是,每个类都应该对单个视图建模,因此建模的类应该只包含那些实际出现在建模视图上的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()
}
}
}https://stackoverflow.com/questions/25736172
复制相似问题