Skip to main content
Version: 8.0.2

How to Use waitForCondition

waitForCondition is a powerful feature in Test Maker that enables you to implement smart waiting strategies in your test automation scripts. It allows you to wait for a specific condition to be met before proceeding to the next step, thus ensuring your tests run efficiently and effectively. In this guide, we will explore how to use waitForCondition and its various options to enhance your testing process.

Understanding waitForCondition

waitForCondition is designed to be a more intelligent alternative to traditional while loops or custom waiting code. It streamlines the waiting process, minimizing the waiting time while ensuring that your test proceeds as soon as the specified condition is fulfilled. This is particularly valuable when working with dynamic web applications where the availability of elements or conditions may change during test execution.

Key Features of waitForCondition

1. Condition Definition

The heart of waitForCondition is the condition you want to check. This condition should be an asynchronous function that returns a Boolean value. It determines whether the waiting should continue or if it's time to move forward.

await I.waitForCondition({
condition: async () => {
// Your condition logic here
return true; // Return true when the condition is met
},
// Other options...
});

2. Retry Options

waitForCondition provides options for handling retries and backoff strategies. You can specify the interval between condition checks, the maximum time to wait, and even a custom retry message. These options allow you to fine-tune the waiting behavior to suit your specific testing needs.

await I.waitForCondition({
condition: async () => {
// Your condition logic here
return true;
},
interval: 1000, // Check the condition every second
timeout: 40000, // Wait for a maximum of 40 seconds
retryMessage: "Custom retry message..."
});

3. Error Handling

In case the condition is not met within the specified timeout, you can handle errors gracefully. Test Maker will throw an error, but you can capture it and take appropriate actions. waitForCondition provides several options to control error handling:

  • throwOnError: Indicates whether to throw an error if the condition is not met within the specified timeout.

  • errorMessage: Allows you to provide a custom error message to be thrown when the condition is not met within the timeout.

  • overrideErrorMessage: Overrides the default error message with a custom message when the condition is not met.

Here's an example illustrating the usage of these error-handling options:

    await I.waitForCondition({
condition: async () => {
// Your condition logic here
return true;
},
interval: 1000,
timeout: 40000,
retryMessage: "Custom retry message...",
throwOnError: true, // Enable throwing an error
errorMessage: "Custom error message for timeout", // Custom error message
overrideErrorMessage: true, // Enable overriding the default error message
});

In this example, the code snippet sets the throwOnError option to true, indicating that an error should be thrown if the condition is not met within the specified timeout. It also customizes the error message using the errorMessage option and overrides the default error message using the overrideErrorMessage option. You can tailor these options to suit your error handling preferences and the specific needs of your tests.

4. Versatility

One of the most significant advantages of waitForCondition is its versatility. You can use it to wait for element visibility, text changes, button clicks, and any other condition you require. The example below demonstrates waiting for a "Continue" button to appear, then clicking it:

let ContinueButton = Selector(`input[value="Continue"]`, { timeout: 1000 });

await I.waitForCondition({
condition: async () => {
try {
await I.waitForSelectorToBeVisible(ContinueButton);
await I.click(ContinueButton);
} catch {
console.log(`Continue Button no longer clickable`);
}
return !(await ContinueButton.exists && await ContinueButton.visible);
},
interval: 1000,
timeout: 40000,
retryMessage: "Re-Clicking on Continue..."
});

Transforming While Loops into waitForCondition

One key insight to note is that nearly every while loop or similar custom waiting code can be transformed into a waitForCondition. By doing so, you not only make your code more efficient but also benefit from the built-in retry and error handling mechanisms.

Conclusion

waitForCondition is a valuable tool in Test Maker, allowing you to implement smart waiting strategies in your test automation scripts. By defining conditions, adjusting retry options, and handling errors, you can create more robust and efficient tests for dynamic web applications. Whether you are waiting for element visibility, text changes, or any other condition, waitForCondition streamlines the process and improves the reliability of your tests.