Some typical reasons why scripts do not play accurately after recording are listed below. In such instances you will need
to customize your test script.
- Stateful scripts: Recorded scripts only work when the application under test has the same state during replay that it had during script recording.
For example, a script that includes user login can only be run correctly when the application is in a logged-out state. You
can work around this issue by either setting the application state by manually adding logic to your script, or you can ensure
that your recorded scripts do not change application state in the first place (for example, you could include user log out
during the recording of your script).
- Temporarily generated DOM attributes: Some AJAX frameworks generate attributes that change each time a page is loaded (for example,
x-auto values in
ext). If a locator relies on such attributes, script replay will fail. You will need to add the attributes to the ignored attributes
list to prevent them from being recorded in the future.
- Missing mouse movements: When you are testing websites where items only appear if you are hovering with your mouse over certain elements (for example
a button or a menu item), you will get an error during the replay of the script.
Silk Performer cannot detect the item because the hovering event is not recorded. Menus that are built with JavaScript are a good example
for such a case. However, with
Silk Performer you can fix this problem during the replay of a script. In the
Browser Application, you can click the
Troubleshoot button when the error occurs, select
Insert Mouse Move from the list, move the mouse over the UI element, press
<Pause/Break> on your keyboard, click
Insert, and click
Rerun Script. Now the script will run without an error.
- Calls that run into the synchronization timeout: Built-in AJAX synchronization waits until the browser is in an idle state before API calls are returned. This is a key factor
in reliable testing of AJAX-based applications. However, in some situations there is no idle state (for example, if a page
uses polling or keeps connections open for server-push events). In such situations the synchronization waits until it runs
into a timeout. You can work around this issue by temporarily setting the synchronization mode back to HTML.