Selenium Shadow-Root/PDF-Viewer с доступом к кнопке загрузки ⇐ Python
-
Anonymous
Selenium Shadow-Root/PDF-Viewer с доступом к кнопке загрузки
Я предоставил ссылку на изображение для справки, которая, надеюсь, прояснит все вопросы, касающиеся моей проблемы.
https://drive.google.com/file/d/1tc_0pn ... sp=sharing
Кажется, я не могу найти способ получить доступ к DOM теневого корня, чтобы иметь возможность нажать кнопку загрузки.
Я пытаюсь загрузить PDF-файл, чтобы проверить правильность его заполнения на основе предоставленных ответов.
Я использую Python Selenium
Просмотр PDF – это модальное окно со встроенным DOM с теневым корнем и кнопкой загрузки. Как только я получу доступ к теневому корню, я буду знать, как загрузить файл.
Будем благодарны за любую помощь!
Я уже пытался использовать API для получения закодированного ответа, затем декодировал его и создал PDF-файл, однако я не форматирую его так, как это делает программа просмотра, имея возможность проверить информация слишком сложна. Я вручную загрузил PDF-файл и уже прошел проверочные тесты, поэтому осталось только загрузить файл сейчас.
Мой текущий тестовый код:
login_page.click_login() main_page.click_application_tab() main_page.enter_search(context.caseId) application_page.click_action_button() application_page.click_view_pdf() # Это та часть, где я застрял - возможность получить доступ к теневому DOM и нажать кнопку загрузки context.driver.quit() Вот код, который я попробовал:
# download_pdf_button = self.driver.find_element(By.XPATH, '//*[@id="viewer"]').getShadowRoot()\ # .find_element(By.CSS_SELECTOR, 'viewer-toolbar#toolbar').getShadowRoot()\ # .find_element(By.CSS_SELECTOR, 'view-download-controls#downloads')\ # .find_element(По.ID, 'загрузить') -------------------------------------------------- ----------------------- #shadow_host = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[id="viewer"]'))) # Shadow_root = Shadow_host.shadow_root # download_pdf_button = wait.until(лямбда-драйвер:shadow_root.find_element(By.CSS_SELECTOR, '[id="download"]')) # download_pdf_button.click() -------------------------------------------------- ----------------------- #shadow_root = self.driver.find_element(By.CSS_SELECTOR, '[id="viewer"]').shadow_root #viewer_toolbar =shadow_root.find_element(By.CSS_SELECTOR, 'viewer-toolbar#toolbar').shadow_root # view_download_controls =view_toolbar.find_element(By.CSS_SELECTOR, 'view-download-controls#downloads') # download_pdf_button = view_download_controls.find_element(By.CSS_SELECTOR, '[id="download"]') # download_pdf_button.click() -------------------------------------------------- ----------------------- # self.driver.execute_script(""" # constshadowHost = document.querySelector('#viewer'); # constshadowRoot =shadowHost.shadowRoot; # const downloadButton =shadowRoot.querySelector('#download'); # downloadButton.click(); # """) Я также проверил наличие нескольких дескрипторов окон и не обнаружил никаких других окон, кроме основного.
Я предоставил ссылку на изображение для справки, которая, надеюсь, прояснит все вопросы, касающиеся моей проблемы.
https://drive.google.com/file/d/1tc_0pn ... sp=sharing
Кажется, я не могу найти способ получить доступ к DOM теневого корня, чтобы иметь возможность нажать кнопку загрузки.
Я пытаюсь загрузить PDF-файл, чтобы проверить правильность его заполнения на основе предоставленных ответов.
Я использую Python Selenium
Просмотр PDF – это модальное окно со встроенным DOM с теневым корнем и кнопкой загрузки. Как только я получу доступ к теневому корню, я буду знать, как загрузить файл.
Будем благодарны за любую помощь!
Я уже пытался использовать API для получения закодированного ответа, затем декодировал его и создал PDF-файл, однако я не форматирую его так, как это делает программа просмотра, имея возможность проверить информация слишком сложна. Я вручную загрузил PDF-файл и уже прошел проверочные тесты, поэтому осталось только загрузить файл сейчас.
Мой текущий тестовый код:
login_page.click_login() main_page.click_application_tab() main_page.enter_search(context.caseId) application_page.click_action_button() application_page.click_view_pdf() # Это та часть, где я застрял - возможность получить доступ к теневому DOM и нажать кнопку загрузки context.driver.quit() Вот код, который я попробовал:
# download_pdf_button = self.driver.find_element(By.XPATH, '//*[@id="viewer"]').getShadowRoot()\ # .find_element(By.CSS_SELECTOR, 'viewer-toolbar#toolbar').getShadowRoot()\ # .find_element(By.CSS_SELECTOR, 'view-download-controls#downloads')\ # .find_element(По.ID, 'загрузить') -------------------------------------------------- ----------------------- #shadow_host = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[id="viewer"]'))) # Shadow_root = Shadow_host.shadow_root # download_pdf_button = wait.until(лямбда-драйвер:shadow_root.find_element(By.CSS_SELECTOR, '[id="download"]')) # download_pdf_button.click() -------------------------------------------------- ----------------------- #shadow_root = self.driver.find_element(By.CSS_SELECTOR, '[id="viewer"]').shadow_root #viewer_toolbar =shadow_root.find_element(By.CSS_SELECTOR, 'viewer-toolbar#toolbar').shadow_root # view_download_controls =view_toolbar.find_element(By.CSS_SELECTOR, 'view-download-controls#downloads') # download_pdf_button = view_download_controls.find_element(By.CSS_SELECTOR, '[id="download"]') # download_pdf_button.click() -------------------------------------------------- ----------------------- # self.driver.execute_script(""" # constshadowHost = document.querySelector('#viewer'); # constshadowRoot =shadowHost.shadowRoot; # const downloadButton =shadowRoot.querySelector('#download'); # downloadButton.click(); # """) Я также проверил наличие нескольких дескрипторов окон и не обнаружил никаких других окон, кроме основного.
Мобильная версия