在Safari中执行此代码并不起作用,但它适用于chrome和firefox:
var pathToFile = path.resolve('./scripts', file);
element( by.css('input[ng-file-select="onFileSelect($files)"]')).sendKeys(pathToFile);
在挖掘它时,看起来在Safari上运行的Protractor中无法以这种方式与文件输入交互。有没有人知道在Safari中将文件路径放在输入中的解决方法?
答案 0 :(得分:1)
这是由于抽象漏洞,需要特定于Safari的解决方案:
我想那些真正想要为SafariDriver进行文件上传的人的解决方法是不要通过SafariDriver本地进行,而是使用外部代码库通过HTTP / HTTPS(POST)请求执行上传(结合任何其他形式)除了正在上传/发送的文件之外的数据,然后得到响应并检查上传是否成功,然后返回到SafariDriver代码并导航到下一页以检查上传是否成功,和/或从那里继续进行自动化的下一步。
此方法类似于外部使用HTTP请求的文件下载方法,已在WebDriver和Selenium用户Google群组的各个帖子中提及过。在这里,它只是相反,上传而不是下载。
虽然上传需要会话(cookie),但您可以提取Selenium会话cookie并使用HTTP请求。或者,如果会话与URL中的会话ID一起存储,则将其解压缩并传递HTTP请求。
<强>参考强>
Selenium Issue 4220: The SafariDriver does not support file uploads
How to upload file using Selenium when the file input is hidden?
Chrome file upload bug: on change event won't be executed twice with the same file
Selenium IDE 1.4.1 throwing security error when uploading a local file
Dynamically submitting a file upload form in IE10 using jQuery