Доступ к всплывающему окну в браузере для тестирования - PullRequest
0 голосов
/ 27 февраля 2019

Я использую капибару для записи сквозного теста.

У меня есть функция печати внутри моего приложения, и я хочу получить доступ к DOM, чтобы утверждать разные вещи в моем печатном документе.

Как я могу получить доступ к всплывающему DOM с помощью Capybara?

+ Как программно закрыть всплывающее окно печати, когда я закончу утверждать?Кажется, что Capybara застрял после выполнения метода печати. ​​

popup dom

ps: я использую Chrome без головы.

1 Ответ

0 голосов
/ 27 февраля 2019

Примечание. Этот ответ относится только к использованию драйвера Selenium с не-мертвым хромом, и как только вы попадаете в shadowDOM, вы можете использовать только CSS-селекторы, что означает, что вы не можете использовать любой из методов Capybara, использующих встроенные Capybaras.-в селекторах ('fill_in', 'select' и т. д.).Это может также сломаться с любым выпуском Chrome или chromedriver.

Из-за того, как работает chromedriver / chrome, он не возвращается из того действия, которое вы предприняли, чтобы открыть окно печати, пока окно печати не будет закрыто.Технически возможно обойти это, вызывая окно печати асинхронно.Но затем вы сталкиваетесь с проблемой, заключающейся в том, что большая часть окна печати находится внутри теневых DOM-элементов, для которых в настоящее время спецификация WebDriver не предоставляет API.Однако вы можете обойти это, используя evaluate_script.

Поэтому открыть и затем закрыть окно печати было бы что-то вроде этого

print_window = page.window_opened_by do
  page.execute_script('window.setTimeout(function(){ window.print();}, 50)')
end

page.within_window(print_window) do
   print_app = page.find('print-preview-app')
   print_app_shadow = print_app.evaluate_script('this.shadowRoot')
   print_header = print_app_shadow.find('print-preview-header')
   print_header_shadow = print_header.evaluate_script('this.shadowRoot')
   print_header_shadow.find('.cancel-button').click
end

Очевидно, что все эти вызовы могут быть объединены в цепочку, промежуточные элементы только прописаны, чтобы было понятнее, чтоделается.

...