Ruby selenium script waiting for an element to disappear I'm a Java developer, I'm new to Ruby and I'm worried that I'm forcing or not-so-well using the goodness of the Ruby syntax. 


What do you think about the Exception catching and how to print it in error messages?
What about the code block (closure?) I'm passing to the "until" method?
Is it ok to implicitly rely on what the last executed sentence of the block will be, regarding what would be its returned value?


def waitUntilDisappears(type, name) #Waits for a particular element to disappear
  begin
    puts "Waiting for element #{name} to disappear..."
    wait = Selenium::WebDriver::Wait.new(:timeout =&gt; 5)
    wait.until do
      element = driver.find_element(type, name)
      if element != nil
        displayValue = element.css_value("display")
        puts "Element #{name} has displayValue #{displayValue}."
        displayValue != "block"
      end
    end
    puts "Element #{name} disappeared or not present. OK."
  rescue Exception =&gt; e
    puts "Error: Could not wait for element #{name} to disappearDetails: #{e.inspect}"
  end
end
Some notes:


waitUntilDisappears. In Ruby, always: wait_until_disappears.
if element != nil -> if element.
if element != nil. I think find_element never returns nil, it raises exception if not found, so this is not needed.
rescue Exception =&gt; e. A rescue that covers a whole method can omit the begin.
rescue Exception =&gt; e. Rescuing from Exception is bad practice. Rescue from StandardError, which is the same as rescue =&gt; e.
puts "Error". It's bad practice to catch an exception (even worse ifit's all exceptions), just print to the screen and return as if nothing happened. Raise an exception or return a value that signals the error.
Is Element#visible? not enough?


I'd write:

def wait_until_disappears(type, name, timeout: 5)
  wait = Selenium::WebDriver::Wait.new(timeout: timeout)
  wait.until { !driver.find_element(type, name).visible? }
end