Create Page Objects for elm-test-journey
.
root : List Test.Html.Selector.Selector -> (Finder -> Element children) -> Element children
Sets up the context for the rest of the page object. An empty selector will match the root of the view (usually the body tag).
page =
root []
(\rootElement ->
{ self = rootElement
, myChildElement = singleTestAttr rootElement "myChildElement"
}
)
multiple : Finder -> TestJourney.Internal.FriendlyName -> List Test.Html.Selector.Selector -> Basics.Int -> Element {}
Represents a list of nodes.
page =
root []
(\rootElement ->
{ self = rootElement
, myListItem =
multiple rootElement
"myListItem"
[ Selector.attribute (Attributes.attribute "data-test" "myListItem")
]
}
)
element =
page.myListItem 1
multipleRecord : Finder -> TestJourney.Internal.FriendlyName -> List Test.Html.Selector.Selector -> (Finder -> Element children) -> Basics.Int -> Element children
Represents a list of nodes w/ custom children.
page =
root []
(\rootElement ->
{ self = rootElement
, myListItem =
multipleRecord rootElement
"myListItem"
[ Selector.attribute
(Attributes.attribute "data-test" "myListItem")
]
(\myListItem ->
{ self = myListItem
, label = singleTestAttr myListItem "itemLabel"
}
)
}
)
element =
page.myListItem 0 |> .label
single : Finder -> TestJourney.Internal.FriendlyName -> List Test.Html.Selector.Selector -> Element {}
Creates an 'Element' referencing a single node.
page =
root
[]
(\rootElement ->
{ self = rootElement
, myChildElement = single rootElement "myChildElement" [ Selector.attribute (Attributes.attribute "data-test" "myChildElement") ]
}
)
element =
page.myChildElement
singleRecord : Finder -> TestJourney.Internal.FriendlyName -> List Test.Html.Selector.Selector -> (Finder -> Element children) -> Element children
Creates an 'Element' referencing a single node, w/ custom children.
page =
root []
(\rootElement ->
{ self = rootElement
, myElementWithChildren =
singleRecord rootElement
"myChildElement"
[ Selector.attribute (Attributes.attribute "data-test" "myChildElement") ]
(\myElementWithChildren ->
{ self = myElementWithChildren
, childOfChild = singleTestAttr myElementWithChildren "childOfChild"
}
)
}
)
element =
page.myElementWithChildren.childOfChild
{ children | self : Finder }
An element represents a series of selectors and functions that result in finding a single specific node in your application under test. When defining a record element, via singleRecord
, or multipleRecord
, ensure that you always have a field named self
. self
allows elements with and without other fields defined to be treated uniformly.
TestJourney.Internal.Finder
Used by [`TestJourney` ](../../TestJourney.elm) to help locate [`Elements`](#Element) defined in your page.
In practice, a convention like "all elements are identified by an "data-test"="myTestIdentifier"
" makes page objects
more resiliant, and makes it clear when a node in the application under test has test dependencies. These helpers make
creating Page Objects targeting that convention simpler. If your project has it's own conventions, create your own set of
helpers.
multipleTestAttr : Finder -> String -> Basics.Int -> Element {}
Represents a list of nodes, following the "data-test" attribute convention.
page =
root []
(\rootElement ->
{ self = rootElement
, myListItem =
multipleTestAttr rootElement "myListItem"
}
)
element =
page.myListItem 1
multipleRecordTestAttr : Finder -> String -> (Finder -> Element children) -> Basics.Int -> Element children
Represents a list of nodes w/ custom children, following the "data-test" attribute convention.
page =
root []
(\rootElement ->
{ self = rootElement
, myListItem =
multipleRecord rootElement
"myListItem"
(\myListItem ->
{ self = myListItem
, label = singleTestAttr myListItem "itemLabel"
}
)
}
)
element =
page.myListItem 0 |> .label
singleTestAttr : Finder -> String -> Element {}
Creates an 'Element' referencing a single node, following the "data-test" attribute convention.
page =
root
[]
(\rootElement ->
{ self = rootElement
, myChildElement = singleTestAttr rootElement "myChildElement"
}
)
element =
page.myChildElement
singleRecordTestAttr : Finder -> String -> (Finder -> Element children) -> Element children
Creates an 'Element' referencing a single node, w/ custom children, following the "data-test" attribute convention.
page =
root []
(\rootElement ->
{ self = rootElement
, myElementWithChildren =
singleRecord rootElement
"myChildElement"
(\myElementWithChildren ->
{ self = myElementWithChildren
, childOfChild = singleTestAttr myElementWithChildren "childOfChild"
}
)
}
)
element =
page.myElementWithChildren.childOfChild