首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现页面中帧的PageObjects模式

实现页面中帧的PageObjects模式
EN

Stack Overflow用户
提问于 2014-09-09 03:14:29
回答 1查看 2.2K关注 0票数 1

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

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

代码语言:javascript
复制
Public Class HomePageLeftFrame{

private WebElement link;
private WebElement textField;

}

如何为HomePageLeftFrame object...Is中的两个元素编写@FindBy注释?

注释:,根据selenium for pageObjects的文档,可以提到页面对象可以是整个pageObjects页面或page..Is的一部分,对上述实现的理解是正确的吗??

EN

回答 1

Stack Overflow用户

发布于 2014-09-09 05:21:13

在编写我的建议之前,我想分享一下我开发了POM框架的应用程序。因此,基本上,我的应用程序对于每个html页面有三个不同的框架:

  1. 顶部框架:它是对整个应用程序的共享视图,其中包含了常见的功能主义者,如注销、帮助、管理设置等。
  2. 左导航面板:在我的应用程序中的大多数地方,这个框架是可用的,它在应用程序的不同部分之间提供导航。
  3. 内容框架:这是用户进行主要操作的框架。

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

代码语言:javascript
复制
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应该包含只出现在该帧上的注销元素。

代码语言:javascript
复制
    @FindBy(name = "logOut") // To find the element by name
    @CacheLookup
    private WebElement logOutLInk;

在对其执行任何操作时,您应该将其视为WebElement的一个实例。

logOutLInk.click();

代码语言:javascript
复制
  /**
   * 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类示例:

代码语言:javascript
复制
  /**
   * 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);
    }
}

这是测试类的一个示例:

代码语言:javascript
复制
      /**
       * 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()
            }
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25736172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档