我是使用 QAF 自动化框架的新手。我遵循了此页面上的文档 - https://qmetry.github.io/qaf/latest/setting_driver_capabilities.html
我的要求是:我必须在测试中下载一个文件,并且下载应该转到项目的下载文件夹,而不是Macbook/测试机器的下载文件夹。
我正在使用chromeDriver,必须在QAF框架内的应用程序属性文件中设置chrome功能。我添加了以下内容,但它不起作用
chrome.capabilities.profile.default_content_settings.popups=0
chrome.capabilities.download.default_directory=/downloads
chrome.capabilities.credentials_enable_service=false
chrome.capabilities.profile.password_manager_enabled=false
chrome.capabilities.CapabilityType.ACCEPT_SSL_CERTS=true
chrome.additional.capabilities={"chrome options":{"args":["--headless -
-disable-gpu"]}}
我还尝试直接使用 chrome.additional.capabilities 来设置我想设置的所有功能,如下所示,但它也不起作用
chrome.additional.capabilities={"chrome options":{"args":["--allow-
outdated-plugins","--always-authorize-plugins","--headless --disable-
gpu","-disable-extensions"]},"prefs":
[{"profile.default_content_settings.popups":0},
{"download.default_directory":"/downloads"},
{"credentials_enable_service":false},
{"profile.password_manager_enabled":false}]}
当我执行测试时,测试成功运行并通过,但文件下载到我的 macbook 下载目录,而不是我使用功能设置的项目特定下载文件夹中。
我尝试使用chromeDriver.capabilities而不是chrome.capabilities,但没有成功。
以前使用过QAF的任何人都可以帮助我解决这个问题吗?
附加功能值中的一些校正需求:
- 铬选项的键是
chromeOptions
- 首选项也是需要带有键
prefs
映射的选项之一 - 尝试为下载目录提供绝对路径。
您的附加功能应如下所示(确保没有换行符(:
chrome.additional.capabilities={"chromeOptions":{"args":["--allow-
outdated-plugins","--always-authorize-plugins","--headless --disable-
gpu","-disable-extensions"],"prefs":
{"profile.default_content_settings.popups":0,
"download.default_directory":"/usr/workspace/testproject/downloads",
"credentials_enable_service":false,
"profile.password_manager_enabled":false}}}
参考 chromeOptions-object
编辑:根据驱动程序版本,您可能需要在Chrome特定的功能中添加goog
前缀,例如:
chrome.additional.capabilities={"goog:chromeOptions":{"args":["start-maximized","--ignore-certificate-errors"]}}
下面的示例演示如何在使用侦听器初始化驱动程序之前将功能附加到复杂对象。例如,为了使用Firefox配置文件,您可以使用qaf驱动程序侦听器。
@Override
public void beforeInitialize(Capabilities desiredCapabilities) {
FirefoxProfile profile= new FirefoxProfile();
//create and set profile as per need
profile.setPreference( "layout.css.devPixelsPerPx", "0.9" );
((DesiredCapabilities)desiredCapabilities).setCapability(FirefoxDriver.PROFILE, profile);
//you also can provide existing profile name. AFAIK firefoxdriver supports existing profile name as well.
//((DesiredCapabilities)desiredCapabilities).setCapability(FirefoxDriver.PROFILE, "my-profile");
}
@Override
public void beforeInitialize(Capabilities desiredCapabilities) {
ChromeOptions options = new ChromeOptions();
//set options and merge to capabilites
//options.addExtensions(paths);
desiredCapabilities.merge(options);
}
以下设置放置在 application.properties 文件中。
对于铬:
driver.name=chromeDriver
chrome.capabilities={"chromeOptions":{"args":["--allow-outdated-plugins","--always-authorize-plugins","--headless --disable-gpu","-disable-extensions"],"prefs":{"profile.default_content_settings.popups":0,"download.default_directory":"C:\server","credentials_enable_service":false,"profile.password_manager_enabled":false}}}
webdriver.chrome.driver =C:/server/chromedriver.exe
以下设置适用于IE11
driver.name=iExplorerdriver
system.webdriver.ie.driver = C:/server/IEDriverServer.exe
iexplorer.additional.capabilities={'ignoreProtectedModeSettings':true}
iexplorer.additional.capabilities={'nativeEvents':false}
iexplorer.additional.capabilities={'unexpectedAlertBehaviour':accept}
iexplorer.additional.capabilities={'enablePersistentHover':true}
iexplorer.additional.capabilities={'ignoreZoomSetting':true}
iexplorer.additional.capabilities={'requireWindowFocus':true}
iexplorer.additional.capabilities={"ignoreProtectedModeSettings":"true",'nativeEvents':false,'unexpectedAlertBehaviour':accept,'enablePersistentHover':true,'ignoreZoomSetting':true,'requireWindowFocus':true}
iexplorer.additional.capabilities={'ignoreProtectedModeSettings':true,'nativeEvents':false,'unexpectedAlertBehaviour':accept,'enablePersistentHover':true,'ignoreZoomSetting':true,'requireWindowFocus':true}
感谢@user861594回答这个问题。
我最近发现了一种更简单的方法,可以在 BaseTestCase 类本身而不是在 application.properties 中设置此 chrome 功能。
这是我所做的,效果很好!!
声明你的文件路径 = "xyz";
String chromePrefs = "{'acceptSslCerts': true,'chromeOptions': {'prefs': {'prompt_for_download': false,'download.default_directory': '"+filePath+"'}}}";
ConfigurationManager.getBundle().setProperty("chrome.additional.capabilities", chromePrefs);
享受自动化!