Class PageAreaImpl

All Implemented Interfaces:
CapybaraPortingLayer, Control.Owner, PageArea
Direct Known Subclasses:
AbstractDashboardViewPortlet, AbstractListViewColumn, AbstractStep, ArtifactManagement, ArtifactManagement.Factory, ArtifactoryGlobalConfig, ArtifactoryGlobalConfig.Server, ArtifactoryGradleConfiguratior, AuditTrailGlobalConfiguration, AuthorizationStrategy, Axis, BranchSource, BreadCrumbs, BuildAccessControl, BuildExecutorStatus, BuildParameters, BuildTimeout, BuildTriggerConfig, BuildWrapper, Cloud, CodeMirror, ColumnsArea, ComputerConnector, ComputerLauncher, Credential, CredentialsBinding, DashboardPortlets, DiskUsageGlobalConfig, DockerCommand, Domain, EnvInjectConfig, ExternalGlobalConfig, ExternalNodeConfig, GitLabServerConfig, GitScm.Behaviour, GlobalConfig, GlobalDockerConfig, GlobalPluginConfiguration, HtmlPublisher.Report, JabberGlobalConfig, JabberGlobalConfig.AdvancedConfig, JabberGlobalConfig.EnabledConfig, JabberGlobalConfig.MUCConfig, JabberPublisher.Publishers, JiraGlobalConfig, JobFiltersArea, LdapGroupMembershipStrategy, LogParserGlobalConfig, MailerGlobalConfig, MainArea, MainPanel, MatrixRow, MavenProjectConfig, OicAuthConfigurationMode, OnlineStatusNotification, Parameter, PriorityConfig.Group, ProjectMatrixProperty, ProjectStatusStdJobList, Scm, ScmPolling, SecurityRealm, ServerCredentialMapping, SshCredentialDialog, SshPrivateKeyCredential.Direct, StageView, TimstamperGlobalConfig, ToolInstallation, Trigger, TriggerConfig, WorkflowSharedLibrary, WorkflowSharedLibraryGlobalConfig, WsCleanup, XUnitPublisher.Tool, XvncGlobalJobConfig, XvncJobConfig

public abstract class PageAreaImpl extends CapybaraPortingLayerImpl implements PageArea
Special kind of page object that maps to a portion of a page with multiple INPUT controls.

Typically we use this to map a set of controls in the configuration page, which is generated by composing various config.jelly files from different extension points.

Author:
Oliver Gondza
  • Constructor Details

    • PageAreaImpl

      protected PageAreaImpl(PageObject context, String path)
      Parameters:
      context - Parent page object area is scoped to.
      path - Absolute path to the area.
    • PageAreaImpl

      protected PageAreaImpl(PageArea area, String path)
      Parameters:
      area - Parent area new area is scoped to.
      path - Absolute or relative path prefix, if absolute must be prefixed by area.getPath(). IOW, it needs to be in parent area.
  • Method Details

    • self

      public org.openqa.selenium.WebElement self()
      Description copied from interface: PageArea
      Returns WebElement that corresponds to the element that sits at the root of the area this object represents.
      Specified by:
      self in interface PageArea
    • getPath

      public String getPath()
      Specified by:
      getPath in interface PageArea
    • getPath

      public String getPath(String rel)
      Specified by:
      getPath in interface PageArea
    • getPath

      public String getPath(String rel, int index)
      Specified by:
      getPath in interface PageArea
    • getPage

      public PageObject getPage()
      Specified by:
      getPage in interface PageArea
    • path

      public org.openqa.selenium.By path(String rel)
      Returns the "path" selector that finds an element by following the form-element-path plugin.

      form-element-path-plugin

      Specified by:
      path in interface Control.Owner
      Specified by:
      path in interface PageArea
    • control

      public Control control(String... relativePaths)
      Create a control object that wraps access to the specific INPUT element in this page area.

      The Control object itself can be created early as the actual element resolution happens lazily. This means PageArea implementations can put these in their fields.

      Several paths can be provided to find the first matching element. Useful when element path changed between versions.

      Specified by:
      control in interface PageArea
    • control

      public Control control(org.openqa.selenium.By selector)
      Specified by:
      control in interface PageArea
    • createPageArea

      @NonNull public String createPageArea(String name, Runnable action) throws org.openqa.selenium.TimeoutException
      Description copied from interface: PageArea
      Capture path attribute of newly created form chunk upon invoking action.

      Consider "Add" button in page area with path "/foo" that is supposed to create new page area with path "/foo/bar" or "/foo/bar[n]". There are several problems with the straightforward approach: - Created area may or may not be the first one of its kind so figuring the "path" is nontrivial. - The area may can take a while to render so waiting is needed. - Even after the markup appears, it can take a while for "path" attribute is added.

      This method properly wait until the new path is known. To be used as:

       
        String barPath = fooArea.createPageArea("bar", () -> control("add-button").click());
        new FooBarArea(fooArea, barPath);
        
        
      Specified by:
      createPageArea in interface PageArea
      Parameters:
      name - Name of the surrounding div which will the next segment in path. Given the area is "/builder" and we are about to construct /builder/shell[3], the relative prefix is "shell".
      action - An action that triggers the page area creation. Clicking the button, etc.
      Returns:
      The surrounding path of the area, exception thrown when not able to find out.
      Throws:
      org.openqa.selenium.TimeoutException