gpt4 book ai didi

java - 为页面中的框架实现 PageObjects 模式

转载 作者:行者123 更新时间:2023-11-30 03:45:49 27 4
gpt4 key购买 nike

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

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

Public Class HomePageLeftFrame{

private WebElement link;
private WebElement textField;

}

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

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

最佳答案

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

  1. 顶部框架:它是整个应用程序的共享 View ,其中包含常见的功能,例如注销、帮助、管理设置等。

  2. 左侧导航面板:在我的应用程序中的大多数位置,此框架都可用,它提供应用程序不同部分之间的导航。

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

为这种类型的应用程序设计一个基于页面对象的框架确实是一项繁琐的工作,但我决定以这样的方式设计它,这样我们就可以避免所有重复的代码。首先我将分享框架结构:

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:这个包包含常见 View 的页面对象类,正如我已经说过的,TopFrame 是你可以在整个应用程序中看到的东西,所以我对此进行了建模为了将框架导航与 Page 对象类分离,我将其保存在一个单独的包中,该包只不过是 Page 对象类的父包。

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

org.xyz.automation.sdk.leftpanel.pages:与上面类似,这个包包含左面板的页面对象java类,我再次将这个左面板的导航与leftpanel分开.pages 包。

@FindBy这只不过是查找建模页面的网络元素的快捷方式。页面对象的基本概念是每个类应该仅对单个 View 进行建模,因此建模类应仅包含实际出现在建模 View 上的那些 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();
}
}

导航器类示例:

  /**
* 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()
}
}
}

关于java - 为页面中的框架实现 PageObjects 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25736172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com