Ger*_*ald 0 headless-browser robotframework google-chrome-headless
如何使用Page.setDownloadBehavior在Chrome浏览器开发工具来传递,这样我可以用下面的代码设置为无头镀铬的下载行为?
Create Chrome Browser
[Arguments] ${link_to_open}
${chrome_options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys, selenium.webdriver
${prefs}= Create Dictionary download.default_directory=${DOWNLOADS_DIR}
Call Method ${chrome options} add_argument headless
Call Method ${chrome options} add_argument disable-gpu
Selenium2Library.Go To ${link_to_open}
Run Code Online (Sandbox Code Playgroud)
尝试使用Chrome以无头模式下载文件时似乎存在"安全功能".这在Chromium问题跟踪器中进一步讨论.这指向了使用chrome无头和selenium进行下载的StackOverflow答案.在这个答案中给出了一个Python示例(GitHub),它可以轻松转换为Robot Framework Library:
headless_download.py
class headless_download(object):
ROBOT_LIBRARY_VERSION = 1.0
def __init__(self):
pass
def enable_download_in_headless_chrome(self, driver, download_dir):
"""
there is currently a "feature" in chrome where
headless does not allow file download: https://bugs.chromium.org/p/chromium/issues/detail?id=696481
This method is a hacky work-around until the official chromedriver support for this.
Requires chrome version 62.0.3196.0 or above.
"""
# add missing support for chrome "send_command" to selenium webdriver
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
command_result = driver.execute("send_command", params)
print("response from browser:")
for key in command_result:
print("result:" + key + ":" + str(command_result[key]))
Run Code Online (Sandbox Code Playgroud)
下载文件时,完全符合此示例的Robot Framework下载文件的StackOverlow答案.为无头模式,附加库和工作示例添加额外的行:
headless_download.robot
*** Settings ***
Test Teardown Close All Browsers
Library Selenium2Library
Library OperatingSystem
Library headless_download
*** Test Cases ***
Download PDF
# create unique folder
${now} Get Time epoch
${download directory} Join Path ${OUTPUT DIR} downloads_${now}
Create Directory ${download directory}
${chrome options}= Evaluate sys.modules['selenium.webdriver'].ChromeOptions() sys, selenium.webdriver
# list of plugins to disable. disabling PDF Viewer is necessary so that PDFs are saved rather than displayed
${disabled} Create List Chrome PDF Viewer
${prefs} Create Dictionary download.default_directory=${download directory} plugins.plugins_disabled=${disabled}
Call Method ${chrome options} add_experimental_option prefs ${prefs}
Call Method ${chrome options} add_argument headless
Call Method ${chrome options} add_argument disable-gpu
Create Webdriver Chrome chrome_options=${chrome options}
Go To http://www.sample-videos.com/download-sample-text-file.php
${S2L} get library instance Selenium2Library
${webdriver} Call Method ${S2L} _current_browser
Enable Download In Headless Chrome ${webdriver} ${download directory}
Click Link xpath=//a[@data='1']
# wait for download to finish
${file} Wait Until Keyword Succeeds 1 min 2 sec Download should be done ${download directory}
*** Keywords ***
Download should be done
[Arguments] ${directory}
[Documentation] Verifies that the directory has only one folder and it is not a temp file.
...
... Returns path to the file
${files} List Files In Directory ${directory}
Length Should Be ${files} 1 Should be only one file in the download folder
Should Not Match Regexp ${files[0]} (?i).*\\.tmp Chrome is still downloading a file
${file} Join Path ${directory} ${files[0]}
Log File was successfully downloaded to ${file}
[Return] ${file}
Run Code Online (Sandbox Code Playgroud)
简而言之:如果没有其他人对Stack Overflow的贡献,这个答案是不可能的.如果这为您提供了可行的解决方案,请按照其他答案的链接进行操作,并提供相应的答案.
| 归档时间: |
|
| 查看次数: |
4039 次 |
| 最近记录: |