Hi all, I am getting the following error "Unable to retrieve content because the page is navigating and changing the content" when doing the following:
I am using the .NET flavor of Playwright. I know it has to do with a 'waiting for navigation' thing, as the page isn't yet loaded (the browser is still 'spinning', but how would I handle this if I have a generic method called "GetPageSource()" that just returns back Page.ContentAsync() and doesn't know whether or not there is a navigation going on?
I know there is Page.WaitForURLAsync() but that is expecting the URL, which I wouldn't know.
Thanks in advance for any help.
This thread is trying to answer question "How to handle the error 'Unable to retrieve content because the page is navigating and changing the content' when trying to get the new page's source using Page.ContentAsync() in .NET Playwright?"
Hi, what if you don't make GetPageSource() responsible for the waiting, but instead make the function which executes the JavaScript responsible for the waiting? I suppose that function knows which JavaScript it's executing, and knows what it's doing (navigation), so that sounds to me to be the best place to also take care of ensuring that the navigation is ready before returning from that function.
What exactly to wait for depends on the app.
Some kind of indication that the page is done rendering (which is harder nowadays since so much is happening asynchronously).
But for example a login page may as a last step set focus to the username field. In such case you could wait for await page.locator('username:focus').waitFor()
Or you could wait for an API response which is always last:
await page.waitForResponse(/last api response/)
But those are just examples.
Rayrun is a community for QA engineers. I am constantly looking for new ways to add value to people learning Playwright and other browser automation frameworks. If you have feedback, email [email protected].