Wdio-Workflo

Wdio-Workflo

  • Guides
  • Demo Page
  • Examples
  • API
  • Github

›Customizing Page Nodes

Getting Started

  • Setup
  • Writing your first Test

Configuration

  • Configuration Options

Architecture

  • Class Diagram

Specs

  • Specs

Page Objects

  • Page Objects
  • Element
  • List
  • Map
  • Group
  • Store
  • Page

Steps

  • Steps

Testcases

  • Testcases

Customizing Page Nodes

  • Introduction
  • Customizing an Element
  • Customizing a List
  • Customizing a Map

Various Tools

  • XPath Builder
  • The `getUid` Function
  • Execution Lists
  • Manual Results

Testrunner

  • CLI Options
  • Running Tests
  • Debugging
  • Reporters

Customizing a Map

Customizing a PageElementMap class is very similar to customizing a PageElementList. However, the only situation where you might want to do so is when you created a custom element which you want to manage with a map.

Adding a Map Factory Method for Custom Elements

For demonstration purposes, I added an incredible complex Link component in the wdio-workflo-example repository (all it can do is open a link).

The Link component would often be used in navigation menus which are mostly static by nature (the content of a navigation menu usually does not change). Our preferred class for managing static elements is PageElementMap.

So we now need to a map factory method named LinkMap for our Link component to PageNodeStore.ts located in the src/page_objects/stores folder of the wdio-workflo-example repository:

LinkMap<K extends string>(
  selector: Workflo.XPath,
  opts: Workflo.PickPartial<
    core.elements.IPageElementMapOpts<
      this, K, Link<this>, Pick<ILinkOpts<this>, Workflo.Store.ElementPublicKeys>
    >,
    Workflo.Store.MapPublicKeys,
    Workflo.Store.MapPublicPartialKeys
  >,
) {
  return this.Map(
    selector,
    {
      elementStoreFunc: this.Link,
      elementOpts: { ...opts.elementOpts },
      ...opts,
    },
  );
}

If you read the Customizing a List guide, this code will look very familiar to you - it is almost identical to the code we used for our list factory method FeedItemList.

The only difference is that our factory method itself now has a type parameter called K which describes the keys used to identify the elements managed by the map when invoking the map's $ accessor.

When you call our LinkMap factory method, you do not need to explicitly specify the type of K because TypeScript can infer it from the identifier property of the opts object. This is also the reason why the opts object is always mandatory for map factory methods - without it, a map would not make much sense since the identifier property is needed to define the elements managed by the map.

← Customizing a ListXPath Builder →
  • Adding a Map Factory Method for Custom Elements
Wdio-Workflo
Docs
GuidesExamplesAPI Reference
More
GitHubStar
Copyright © 2019 Florian Hilbinger