我正在使用 Phantomjs 驱动程序无头运行 selenium webdriver 脚本。我在上传文件时遇到问题,因为在普通浏览器(firefox 或 chrome)上它会弹出操作系统对话框,让我可以在我的机器中找到文件并上传它。如何使用 ghostDriver(Phantomjs 驱动程序)来做到这一点?谢谢
问问题
3586 次
4 回答
0
当涉及上传时,始终识别“文件”类型的元素并与之交互。这将解决您的弹出窗口问题。
例如:在我的应用程序中,上传相关元素具有以下 DOM -
<a id="uploadFileButtonLink" class="uploadFileButtonLink" href="javascript:void(0)" data-uidsfdc="3" style="display: none;">Upload a file</a>
<input id="multiFileInput" class="multifile-upload-input-button" type="file" name="chatterFile_upload" multiple="multiple"/>
<input id="multiUploadBtn" class="btnImportant" type="button" value="Upload Files"/>
在这种情况下,您可以将 sendKeys 方法用于“file”类型的“multiFileInput”。这种方式适用于所有 FF、Chrome 和无头浏览器。
于 2013-05-02T06:16:25.260 回答
0
我有同样的问题,并发布了同样的问题。使用 sendKeys() 方法时,PhantomJS 挂断。
他们在这里记录了一个问题 - https://github.com/ariya/phantomjs/issues/10993
关于该问题的评论之一指出以下声明有效 -
(PhantomJSDriver) driver.executePhantomJS("var page = this; page.uploadFile('input[type=file]', 'path to file');");
您可以尝试上述解决方案,但它可能有效,也可能无效。
于 2015-03-30T06:51:58.690 回答
0
如果设置了“多个”属性,此代码帮助我上传:
protected void uploadFile(CharSequence... keys) {
if (((WrapsDriver) driver).getWrappedDriver() instanceof PhantomJSDriver) {
StringBuffer s = new StringBuffer(keys.length);
for (int index = 0; index < keys.length; index++) {
s.append(keys[index].toString());
}
((PhantomJSDriver) ((WrapsDriver) driver).getWrappedDriver()).executePhantomJS(
String.format("var page = this; page.uploadFile(arguments[0], '%s');", s.toString()), getElement());
} else {
getElement().sendKeys(keys);
}
}
于 2015-08-18T16:04:10.067 回答
0
var webPage = require('webpage');
var page = webPage.create();
page.uploadFile('input[name=image]', '/path/to/some/photo.jpg');
在新版本的phantomjs中,可以像这样上传文件 uploadfile
于 2016-12-01T09:04:57.540 回答