Search code examples
rubyselenium-webdrivertestunit

How to take screenshot in selenium webdriver with ruby with date and time included in screenshot name?


I am trying to get a screenshot at every step with the current date and time, but I am getting the error

Error: test_login(Login_page): Argument Error: wrong number of arguments (1 for 0)

The code is

 def setup
     @driver = Selenium::WebDriver.for :chrome
     @driver.manage.window.maximize
     @driver.navigate.to "https://www.findmedecor.com"

      wait = Selenium::WebDriver::Wait.new(:timeout => 10)

    screenshot()
  end

  def test_login

    @driver.find_element(:class,'open-overlay').click
    screenshot(DateTime.now)
    wait = Selenium::WebDriver::Wait.new(:timeout => 10)
    login_email = wait.until {
        element = @driver.find_element(:name, "login_email")
        element if element.displayed?
    }

    login_email.send_keys("[email protected]")
    puts "Test Passed: login pop up found" if login_email.displayed?
    screenshot(DateTime.now)
    @driver.find_element(:id,'pass').send_keys('123456')
    @driver.find_element(:id,'btn_login').click

    puts "Logged in successfully"

    puts "Time of test = ", DateTime.now
    screenshot(DateTime.now)
  end
  $i = DateTime.now
  def screenshot
  @driver.save_screenshot("screenshot #{'$i'}.png")
    $i= +1
  end

end

Solution

  • The problem is that Time.now returns a format like '2016-09-28 04:45:40 +0000' which is not a valid filename on Windows. You can just reformat the date/time to something valid like

    Time.now.strftime('%Y-%m-%d_%H.%M.%S')
    

    which outputs 2016-09-27_23.33.59 and then put that in your filename.

    http://ruby-doc.org/core-2.2.0/Time.html#method-i-strftime