I don't know what you mean by "scope". They all work in the same scope.
Wait Until Element Is Enabled
assumes that the element exists on the page, and will wait until the element is enabled (not readonly, and not disabled). If the element does not exist, it will fail immediately (or after a timeout if you have an implicit wait)
Wait Until Element is Visible
assumes that the element exists on the page, and will wait until the element is visible. If the element does not exist, it will fail immediately (or after a timeout if you have an implicit wait)
Wait Until Page Contains Element
makes no assumptions about the element. It waits until the element is actually on the page, regardless if it is visible, invisible, enabled, or disabled. It does not require an implicit wait, since this keyword is an explicit wait.
which keyword is most reliable in case, when I wanna check if element of the page is fully loaded and ready to use?
The most complete solution is to wait for it to be on the page, wait for it to be visible, and then wait for it to be enabled.
If the element will always be on the page, you can skip the first check (ie: if there's no javascript that can create or delete the element).
If the element will always be enabled, you don't need to wait for it to become enabled (ie: if there's no javascript to disable or enable the element)
For simple static pages, you really only need to check that an element is visible. Even that isn't usually necessary since selenium doesn't return from opening a page until the page is loaded. The problem comes when the page is dynamic. That is, when there is javascript that can change what is on the page and whether it is visible or enabled, after the html has loaded.
Is there a keyword that checks if a full page is loaded?
No, because "is loaded" can mean different things in different applications. The browser will set the variable document.readyState
to "complete" when it's done loading the html. You can check for that in robot with something like Wait for condition return window.document.readyState === 'complete'
. Again, if you have javascript that runs on the page, this may not be sufficient since the page might change after the initial HTML is loaded.
There is no single solution that works for all apps. It's up to you to understand what the app is doing at startup, and to make the appropriate checks.
For a nice discussion of how to know when a page is fully loaded using raw python and selenium, see the blog post How to get Selenium to wait for page load after a click