如果web元素调用Selenium中的java脚本函数,我如何从中获取文件URL



我有一些测试用例来验证使用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

最新更新