| stage | none |
|---|---|
| group | unassigned |
| info | To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments |
We devised a solution to solve common test automation problems such as the dreaded NoSuchElementException.
Other problems that dynamic element validations solve are...
- When we perform an action with the mouse, we expect something to occur.
- When our test is navigating to (or from) a page, we ensure that we are on the page we expect before test continuation.
We interpret user actions on the page to have some sort of effect. These actions are
When a page is navigated to, there are elements that always appear on the page unconditionally.
Dynamic element validation is instituted when using
Runtime::Browser.visit(:gitlab, Some::Page)When we perform a click within our tests, we expect something to occur. That something could be a component to now appear on the webpage, or the test to navigate away from the page entirely.
Dynamic element validation is instituted when using
click_element(:my_element, Some::Page)First it is important to define what a "required element" is.
A required element is a visible HTML element that appears on a UI component without any user input.
"Visible" can be defined as
- Not having any CSS preventing its display, for example,
display: noneorwidth: 0px; height: 0px; - Being able to be interacted with by the user
"UI component" can be defined as
- Anything the user sees
- A button, a text field
- A layer that sits atop the page
Requiring elements is very easy. By adding required: true as a parameter to an element, you've now made it
a requirement that the element appear on the page upon navigation.
Given ...
class MyPage < Page::Base
view 'app/views/view.html.haml' do
element :my_element, required: true
element :another_element, required: true
element :conditional_element
end
def open_layer
click_element(:my_element, Layer::MyLayer)
end
end
class Layer < Page::Component
view 'app/views/mylayer/layer.html.haml' do
element :message_content, required: true
end
endGiven the source ...
Runtime::Browser.visit(:gitlab, Page::MyPage)
execute_stuffinvokes GitLab QA to scan MyPage for my_element and another_element to be on the page before continuing to
execute_stuff
Given the source ...
def open_layer
click_element(:my_element, Layer::MyLayer)
endinvokes GitLab QA to ensure that message_content appears on
the Layer upon clicking my_element.
This implies that the Layer is indeed rendered before we continue our test.