How to avoid “StaleElementReferenceException” in Selenium?

前端 未结 16 2388
一向
一向 2020-11-22 12:12

I\'m implementing a lot of Selenium tests using Java. Sometimes, my tests fail due to a StaleElementReferenceException. Could you suggest some approaches to mak

16条回答
  •  时光说笑
    2020-11-22 12:57

    Clean findByAndroidId method that gracefully handles StaleElementReference.

    This is heavily based off of jspcal's answer but I had to modify that answer to get it working cleanly with our setup and so I wanted to add it here in case it's helpful to others. If this answer helped you, please go upvote jspcal's answer.

    // This loops gracefully handles StateElementReference errors and retries up to 10 times. These can occur when an element, like a modal or notification, is no longer available.
    export async function findByAndroidId( id, { assert = wd.asserters.isDisplayed, timeout = 10000, interval = 100 } = {} ) {
      MAX_ATTEMPTS = 10;
      let attempt = 0;
    
      while( attempt < MAX_ATTEMPTS ) {
        try {
          return await this.waitForElementById( `android:id/${ id }`, assert, timeout, interval );
        }
        catch ( error ) {
          if ( error.message.includes( "StaleElementReference" ) )
            attempt++;
          else
            throw error; // Re-throws the error so the test fails as normal if the assertion fails.
        }
      }
    }
    

提交回复
热议问题