Check for a stale element using selenium 2?

前端 未结 2 460
温柔的废话
温柔的废话 2021-01-13 09:03

Using selenium 2, is there a way to test if an element is stale?

Suppose I initiate a transition from one page to another (A -> B). I then select element X and test

相关标签:
2条回答
  • 2021-01-13 09:11

    I don't know what language you are using there but the basic idea you need in order to solve this is:

    boolean found = false
    set implicit wait to 5 seconds
    loop while not found 
    try
      element.click()
      found = true
    catch StaleElementReferenceException
      print message
      found = false
      wait a few seconds
    end loop
    set implicit wait back to default
    

    NOTE: Of course, most people don't do it this way. Most of the time people use the ExpectedConditions class but, in cases where the exceptions need to be handled better this method ( I state above) might work better.

    0 讨论(0)
  • 2021-01-13 09:12

    In Ruby,

    $default_implicit_wait_timeout = 10 #seconds
    
    def element_stale?(element)
      stale = nil  # scope a boolean to return the staleness
    
      # set implicit wait to zero so the method does not slow your script
      $driver.manage.timeouts.implicit_wait = 0
    
      begin ## 'begin' is Ruby's try
        element.click
        stale = false
      rescue Selenium::WebDriver::Error::StaleElementReferenceError
        stale = true
      end
    
      # reset the implicit wait timeout to its previous value
      $driver.manage.timeouts.implicit_wait = $default_implicit_wait_timeout
    
      return stale
    end
    

    The code above is a Ruby translation of the stalenessOf method provided by ExpectedConditions. Similar code could be written in Python or any other language Selenium supports, and then called from a WebDriverWait block to wait until the element becomes stale.

    0 讨论(0)
提交回复
热议问题