我有一些测试用例来验证使用selenium的下载文件。在那里,我可以自动处理浏览器弹出窗口,并为要下载的文件提供默认路径。
在Chrome浏览器中自动处理下载弹出窗口
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.default_content_settings.popups", 0);
prefs.put("download.default_directory","/downloadpath/");
options.setExperimentalOption("prefs", prefs);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
这在我的本地机器上运行良好。但由于上面的一些限制,代码片段在selenium网格中不起作用。作为一个解决方案,我模拟浏览器cookie状态,获取文件URL,并以编程方式将文件写入本地位置,如本例所示。但这种方法存在一些问题。因为它需要web元素包含一个href
属性来定位下载文件的URL。在mycase中,它会在点击按钮时调用java脚本函数来生成文件URL。
HTML代码片段
<input type="button" onclick="javascript:downloadFile()" value="Download">.//does not contains href
Js代码片段
<SCRIPT language="javascript">
function downloadFile() {
var fileType = document.form.fileType.options[document.form.fileType.selectedIndex].value;
var boType = "TransportManifest"
if(fileType == null || fileType == "") {
window.alert('Please select a file type');
} else {
var format = fileType.substring(0, fileType.indexOf("~~"));
var link = "/local/dynamic1234." + format + "?key="+154220756+"&producer=ExportMediaProducer"; // i need to access this generated URL
link = link + "&fileType=" + fileType + "&type=" + boType;
document.location=link;
}
}
</SCRIPT>
请告诉我如何获取文件URL以编程方式下载该文件。是否有任何浏览器侦听器可以触发按钮单击并获取文件URL?
当您单击元素时,假设使用href创建新的框架,您需要在单击后尝试检查元素。
如果没有帮助下载FIDDLER