Skip to content

Commit d9506a4

Browse files
authored
Update README.md
1 parent 551a00f commit d9506a4

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

README.md

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* With the release of **Selenium Foundation** version _28.2.0_, we now provide support for **Appium** sessions via **Selenium 4 Grid**. The auto-generated configuration connects the **Appium** server to the local grid via a relay node.
1111
* **NOTE**: To properly support **HtmlUnitDriver**, **Appium**, and **Safari**, this release includes new custom slot matcher (Selenium 4) and capabilities matcher (Selenium 3). These matchers are activated via a new setting, which can be easily overridden should the need arise.
1212
* With the release of **Selenium Foundation** version _28.1.1_, we now provide support for remote **HtmlUnitDriver** sessions with [HtmlUnit Remote](https://github.com/seleniumhq-community/htmlunit-remote). The project unit tests for **Selenium Foundation** have been switched back to running under this "headless" browser.
13+
* With the release of **Selenium Foundation** version _28.0.0_, we now use **Selenium Manager** (Selenium 4) and **Web Driver Manager** (Selenium 3) to acquire compatible drivers for the browsers targeted by your tests.
1314
* With the release of **Selenium Foundation** version _26.3.4_, automation of Macintosh native applications via the Mac2 engine of Appium is complete. The latest release of the [local-grid-parent](https://github.com/sbabcoc/local-grid-parent) project (_1.5.0_) builds on the [local grid](docs/LocalGridConfiguration.md#introduction) feature of **Selenium Foundation** to launch grid collections that include Mac2 nodes.
1415

1516
#### Table of Contents
@@ -31,6 +32,7 @@
3132
* [Landing Page Verification and Model-Directed Navigation](#landing-page-verification-and-model-directed-navigation)
3233
* [Customizable Transition Error Detection](#customizable-transition-error-detection)
3334
* [Component Collection Classes](#component-collection-classes)
35+
* [Handling Web Site Variations](#handling-web-site-variations)
3436
* [Automatic Stale Element Reference Protection](#automatic-stale-element-reference-protection)
3537
* [Optional Elements](#optional-elements)
3638
* [Page-Load Synchronization](#page-load-synchronization)
@@ -40,7 +42,7 @@
4042
* [Support for TestNG and JUnit 4](#support-for-testng-and-junit-4)
4143
* [Essential Settings](#essential-settings)
4244
* [Overriding Defaults](#overriding-defaults)
43-
* [Installing Drivers](#installing-drivers)
45+
* [Automatic Installation of Drivers](#automatic-installation-of-drivers)
4446

4547
#### In-Depth Documentation
4648

@@ -54,7 +56,8 @@
5456
* [Target Platform Feature](docs/TargetPlatformFeature.md#introduction)
5557
* [Building Page Objects](docs/BuildingPageObjects.md#introduction)
5658
* [Page Components](docs/PageComponents.md#introduction)
57-
* [Working with Browser Modals](docs/WorkingWithBrowserModals.md#introduction)
59+
* [Handling Web Site Variations](docs/HandlingWebSiteVariations.md#introduction)
60+
* [Working with Browser Modals](docs/WorkingWithBrowserModals.md)
5861
* [Transition Error Detection](docs/TransitionErrorDetection.md#introduction)
5962
* [JavaScript Enhancements](docs/JavaScriptEnhancements.md#the-basics-what-webdriver-provides)
6063

@@ -70,14 +73,14 @@ To add a dependency on **Selenium Foundation** for Maven, use the following:
7073

7174
| Selenium 3 | Selenium 4 |
7275
|:---|:---|
73-
| <pre>&lt;dependency&gt;<br/>&nbsp;&nbsp;&lt;groupId&gt;com.nordstrom.ui-tools&lt;/groupId&gt;<br/>&nbsp;&nbsp;&lt;artifactId&gt;selenium-foundation&lt;/artifactId&gt;<br/>&nbsp;&nbsp;&lt;version&gt;29.2.1-s3&lt;/version&gt;<br/>&lt;/dependency&gt;</pre> | <pre>&lt;dependency&gt;<br/>&nbsp;&nbsp;&lt;groupId&gt;com.nordstrom.ui-tools&lt;/groupId&gt;<br/>&nbsp;&nbsp;&lt;artifactId&gt;selenium-foundation&lt;/artifactId&gt;<br/>&nbsp;&nbsp;&lt;version&gt;29.2.1-s4&lt;/version&gt;<br/>&lt;/dependency&gt;</pre> |
76+
| <pre>&lt;dependency&gt;<br/>&nbsp;&nbsp;&lt;groupId&gt;com.nordstrom.ui-tools&lt;/groupId&gt;<br/>&nbsp;&nbsp;&lt;artifactId&gt;selenium-foundation&lt;/artifactId&gt;<br/>&nbsp;&nbsp;&lt;version&gt;29.1.0-s3&lt;/version&gt;<br/>&lt;/dependency&gt;</pre> | <pre>&lt;dependency&gt;<br/>&nbsp;&nbsp;&lt;groupId&gt;com.nordstrom.ui-tools&lt;/groupId&gt;<br/>&nbsp;&nbsp;&lt;artifactId&gt;selenium-foundation&lt;/artifactId&gt;<br/>&nbsp;&nbsp;&lt;version&gt;29.1.0-s4&lt;/version&gt;<br/>&lt;/dependency&gt;</pre> |
7477

7578
To add a dependency for Gradle:
7679

7780
| Platform | Dependency |
7881
|:---:|:---|
79-
| **Selenium 3** | <pre>dependencies {<br/>&nbsp;&nbsp;compile 'com.nordstrom.ui-tools:selenium-foundation:29.2.1-s3'<br/>}</pre> |
80-
| **Selenium 4** | <pre>dependencies {<br/>&nbsp;&nbsp;compile 'com.nordstrom.ui-tools:selenium-foundation:29.2.1-s4'<br/>}</pre> |
82+
| **Selenium 3** | <pre>dependencies {<br/>&nbsp;&nbsp;compile 'com.nordstrom.ui-tools:selenium-foundation:29.1.0-s3'<br/>}</pre> |
83+
| **Selenium 4** | <pre>dependencies {<br/>&nbsp;&nbsp;compile 'com.nordstrom.ui-tools:selenium-foundation:29.1.0-s4'<br/>}</pre> |
8184

8285
### Building Selenium Foundation
8386

@@ -171,6 +174,18 @@ Examples of the sorts of conditions you may want to detect include error pages (
171174

172175
**Selenium Foundation** also includes collection classes ([ComponentList](src/main/java/com/nordstrom/automation/selenium/model/ComponentList.java), [ComponentMap](src/main/java/com/nordstrom/automation/selenium/model/ComponentMap.java), [FrameList](src/main/java/com/nordstrom/automation/selenium/model/FrameList.java), [FrameMap](src/main/java/com/nordstrom/automation/selenium/model/FrameMap.java), [ShadowRootList](src/main/java/com/nordstrom/automation/selenium/model/ShadowRootList.java), and [ShadowRootMap](src/main/java/com/nordstrom/automation/selenium/model/ShadowRootMap.java)) that enable you to define collections of components for your page models. For example, you can define a **SearchResultTile** component and include a map of these tiles keyed by product ID in your **SearchResultsPage** class. **Selenium Foundation** collections are lazy-initialized automatically - the composition of the collection is determined when it's instantiated, but each item in the collection is only populated when it's explicitly referenced.
173176

177+
### Handling Web Site Variations
178+
179+
When modeling a web application, it's common to encounter scenarios where the presentation of a page or component varies from one run to the next. For example:
180+
181+
* You're modeling a site that uses responsive layout and have configured separate runs to verify site behavior in each of the supported breakpoint dimensions.
182+
* The UI/UX team is running an A/B test to evaluate multiple design ideas to determine which one increases engagement and conversion rates.
183+
* You're maintaining an automation suite through a design transition where a new version of a site-wide component (e.g. - header navigation) has been installed on some pages, but other pages are still using the old version.
184+
185+
To enable seamless handling of these sorts of scenarios, **Selenium Foundation** provides a `container resolution` feature that automatically selects the version of a page or component model that corresponds to the current presentation in the browser.
186+
187+
[Learn more...](docs/HandlingWebSiteVariations.md#introduction)
188+
174189
### Automatic Stale Element Reference Protection
175190

176191
One of the most impactful features of **Selenium Foundation** saves your automation from the dreaded **StaleElementReferenceException** failure. Web element search operations performed within the **Selenium Foundation** framework return enhanced references, which retain all of the parameters needed to re-acquire the reference if it goes stale. Every web element method call is guarded by an automatic recovery feature. If a reference goes stale, **Selenium Foundation** re-acquires the reference and re-issues the web element method call that encountered the exception. Your automation continues on normally, blissfully unaware of the disaster that was averted.
@@ -236,16 +251,12 @@ The hierarchy of evaluation produces the following results:
236251

237252
> **BROWSER_NAME** = <mark>firefox</mark>; **TARGET_HOST** = <mark>my.server.com</mark>; **TARGET_PATH** = <mark>/</mark>
238253
239-
## Installing Drivers
240-
241-
Whichever browser you choose to run your automation on, you need to make sure to install the latest driver for that browser compatible with your target version of **Selenium WebDriver**, along with a compatible release of the browser itself. We recommend that you install the drivers and browsers on the file search path to avoid the need to provide additional configuration details via scenario-specific means.
254+
## Automatic Installation of Drivers
242255

243-
Here are the official homes for several of the major drivers:
256+
Since the release of **Selenium Foundation** [28.0.0](https://github.com/sbabcoc/Selenium-Foundation/releases/tag/v28.0.0), we now use **Selenium Manager** (Selenium 4) and **Web Driver Manager** (Selenium 3) to acquire compatible drivers for the browsers targeted by your tests. If the manager is unable to locate or download a required driver, **DriverExecutableNotFoundException** is thrown.
244257

245-
* GhostDriver (PhantomJS) - [http://phantomjs.org/download.html](http://phantomjs.org/download.html)
246-
* ChromeDriver - [https://sites.google.com/a/chromium.org/chromedriver/downloads](https://sites.google.com/a/chromium.org/chromedriver/downloads)
247-
* IEDriver - [http://selenium-release.storage.googleapis.com/index.html?path=2.53/](http://selenium-release.storage.googleapis.com/index.html?path=2.53/)
258+
This feature does not include management of Appium [automation engines](docs/ConfiguringProjectSettings.md#appium-automation-engine-support), which must be installed separately.
248259

249-
**NOTE**: GhostDriver and ChromeDriver are simple binary installations, but several system configuration changes must be applied for IEDriver to work properly. For details, visit the InternetExplorerDriver project Wiki on GitHub and follow the [Required Configuration](https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration) procedure.
260+
**NOTE**: This driver acquisition process is bypassed for test classes that implement the **DriverProvider** interface.
250261

251262
> Written with [StackEdit](https://stackedit.io/).

0 commit comments

Comments
 (0)