Необработанный объект с использованием Capybara, Rspe c, Selenium-webdriver - PullRequest
0 голосов
/ 06 августа 2020

Проблема:

Я не могу войти в веб-приложение с помощью Capybara, rspe c и selenium webdriver. Я могу ввести имя пользователя и пароль в соответствующие поля, но когда я попытался нажать кнопку входа в систему, приложение не вошло в систему. Вместо этого приложение возвращает «Необработанный объект» (попытался включить или отключить файлы cookie). Использование безголового хрома 64 Linux.

lib / abcd.rb

def click_login user, password
  visit "https://www.******.com/users/sign_in"
  fill_in 'user[email]', :with => user
  fill_in 'user[password]', :with => password
  click_button 'Login'
end

Тестовый пример:

require_relative 'lib/*****.rb'

describe 'Visit Websites', type: :feature, driver: :selenium_chrome_headless do

    it "TC001_Test case 1" do
      click_login "user@account.com", "password123"
      expect(page).to have_title "Welcome to home page"
    end
       output:// application stays in the same page

    it "TC002_Test case 2" do
      find(:xpath,".account menu").click
      expect(page).to have_title "Account details page"
    end

настройка драйвера - подход 1

        def setup_driver
     Capybara.register_driver :selenium_chrome_headless do |app|

      Capybara::Selenium::Driver.new(app, browser: :chrome, options: driver_options, :driver_path => 'bin/chromedriver')

    end

  Capybara.configure do |config|

    config.run_server = false
    config.default_driver = :selenium_chrome_headless
   end
 end

 def driver_options

  options = Selenium::WebDriver::Chrome::Options.new(binary: 'bin/headless-chromium')

    arguments = %w[--headless --disable-gpu --window-size=1280x1696
                 --disable-application-cache --disable-infobars --no-sandbox
                 --hide-scrollbars --enable-logging --log-level=0
                 --single-process --ignore-certificate-errors --homedir=/tmp]
  arguments.each do |argument|

    options.add_argument(argument)
  end

  options

end

настройка драйвера - подход 2

        def setup_driver
     Capybara.register_driver :selenium_chrome_headless do |app|

      Capybara::Selenium::Driver.new(app, browser: :chrome, options: driver_options, :driver_path => 'bin/chromedriver')

    end

  Capybara.configure do |config|

    config.run_server = false
    config.default_driver = :selenium_chrome_headless
   end
 end

 def driver_options

  options = Selenium::WebDriver::Chrome::Options.new(binary: 'bin/headless-chromium')

    arguments = %w[--headless --disable-gpu --window-size=1280x1696
                 --disable-application-cache --disable-infobars --no-sandbox
                 --hide-scrollbars --enable-logging --log-level=0
                 --single-process --ignore-certificate-errors --homedir=/tmp]
  arguments.each do |argument|

    options.add_argument(argument)
  end

  options

end

1 Ответ

0 голосов
/ 06 августа 2020

Вы не объяснили, что именно вы пытаетесь здесь сделать (протестировать локальное приложение rails, протестировать удаленное приложение и т.д. По умолчанию ожидается, что каждый тест RSpe c будет полностью независим от любого другого теста (вы должны иметь возможность запускать любой тест по отдельности и / или запускать их все в случайном порядке), поэтому все сбрасывается между каждым тестом (it блок). Это означает, что вам нужно будет входить в систему для каждого теста (до того, как блоки смогут помочь DRY, что вверх). Кроме того, функциональные тесты отличаются от обычных модульных тестов, вы должны тестировать целые пользовательские потоки / поведение, а не только отдельные ожидания - иначе ваши тесты будут выполняться часами.

Для проблемы входа в систему это похоже на вас на самом деле не создали учетную запись в тестируемой системе. Если это локальное приложение, которое вы тестируете, где у вас есть прямое подключение к БД, вам следует изучить приспособления или фабрики, чтобы помочь с настройкой правильного состояния для теста. Проверьте свои журналы, чтобы подтвердить, но я предполагаю, что вы увидите, что вход на самом деле не выполняется из-за неверной комбинации имени пользователя и пароля.

...