Как получить доступ к файлам cookie (Capybara / Selenium Chrome Webdriver) - PullRequest
0 голосов
/ 07 апреля 2020

Мне удалось найти множество примеров, в которых утверждается, что page.driver.cookies должен работать, но такого метода нет на Selenium::WebDriver::Chrome::Driver (что и есть page.driver).

I Пытаюсь покопаться с pry, чтобы найти что-нибудь, что отвечает cookies, cookie_jar, set_cookie или clear_cookies, но, похоже, ничего нет. Не на page, page.driver или page.driver.browser.

Я также не совсем понимаю, что чтение куки не является чем-то проверяемым (драйвер RackTest предоставляет #cookie_jar, но Rack::Test::Methods только вперед set_cookie и clear_cookies). Почему бы мне не протестировать промежуточное программное обеспечение, которое устанавливает повара ie при определенных условиях?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Причина, по которой вы не должны тестировать куки-файлы напрямую, заключается в том, что функциональные / системные тесты являются неподходящим местом для этого. Эти типы тестов предназначены для тестирования вещей с точки зрения пользователей, и пользователи на самом деле не видят куки, они просто видят, как куки поведения включены. Поэтому в тестах Capybara вы должны просто проверять поведение, разрешенное куки-файлами, а не то, что фактические куки-файлы установлены. Настройка / очистка файлов cookie - это действительно то, что нужно проверить в тестах контроллера или запроса.

Если вы все еще настаиваете на прямом доступе к файлам cookie, то они доступны с помощью JS через evaluate_script или с помощью драйвера селена. Speci c методы page.driver.browser.manage.all_cookies, et c. - хотя каждый раз, когда вы звоните page.driver.xxx, вы, вероятно, делаете то, чего не должны.

0 голосов
/ 07 апреля 2020

Просто прочитав эту документацию , вы пробовали что-то вроде этого:

require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome

begin
  driver.get 'https://www.example.com'

  # Adds the cookie into current browser context
  driver.manage.add_cookie(name: "key", value: "value")
ensure
  driver.quit
end

...