I'm using webdriverIO with typescript and jest to automate react application. I have a simple test to check how long it takes for a particular element to display on the screen. There's a process which runs on clicking a button and once the process is completed, a popup is displayed on the screen.

I'm printing time before I wait for the element and then printing it after. Below is the code:

    const time1 = Date.now();
    console.log("Time started --- " + time1);
    const time2 = Date.now();
    console.log("Time Ended --- " + time2);
    $("//span[text()='View Result']").click();

When it runs, it prints the line "Time Ended --" right after "Time Started -- ", even though the application is still waiting for the message dialog. I'm running webdriverIO in the sync mode using @wdio/sync.

Why the "Time Ended" line is getting printed even though previous statement ".waitForExist()" has not returned true yet?

  • It's working correctly for me, make sure that .messagedialog is not present in the DOM because waitforexit check only for the presence and not visibility.
    – PDHide
    Commented Mar 20, 2020 at 8:45
  • 1
    Thanks! That was it.. there was another dialog on the screen with the same class name, causing this issue.
    – Dougg
    Commented Mar 20, 2020 at 21:16
  • please accept the answer by clicking the tick sign near to the answer
    – PDHide
    Commented Mar 22, 2020 at 21:38

1 Answer 1


WaitForExit() checks only for the presence of and not the visibility. You could use $(selector).waitForDisplayed instead. And also ensure there is no other element with the same selector.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.