2

我正在尝试点击链接以将文件附加到页面。页面的 HTML 结构是

<div class="multi_attach_files">
    <span id="WorkkardFileUploader" class="file_uploader">
        <div id="px-widget-1" class="px-widget ui-widget-px">
            <div class="ui-helper-clearfix">
                <div id="px-form-1-input" class="px-form-input">
                    <form id="pxupload1" name="multipleFileUpload" style="" target="pxupload1_frame" action="/multiupload" method="POST" enctype="multipart/form-data" encoding="multipart/form-data">
                        <div class="px-input-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button">
                            <span class="ui-button-text">
                                <span class="label">Attach Files</span>
                                <span id="dragMsg" class="dragcontainer">Drag Here</span>
                                <input id="wkFileUpload" class="fileupload" type="file" multiple="" tabindex="-1" name="noteFilename" title="Attach Files" style="background-color: transparent;">
                            </span>
                        </div>

我已经尝试过.sendkeys()了,但是元素(id="wkFileUpload")对 Selenium 不可见。

有人可以提出任何建议吗?

4

1 回答 1

1

不幸的是,你现在不能这样做(2013 年 9 月,Selenium 2.35.0),因为 Selenium 不支持<input type="file" multiple>元素。

项目开发人员自己对此提出了功能增强请求,但尚未实施。您可以在此处加注星标以将其在优先级列表中向上移动。

该错误提到已经完成了一些工作,但我认为它不会很快完成。最好的办法是使用AutoIT(仅限 Windows)或Robot类(也仅适用于与您类似的设置)并在对话框中“盲目”键入路径:

driver.findElement(By.id("wkFileUpload")).click();
Robot r = new Robot();
r.keyPress(KeyEvent.VK_C);        // C
r.keyRelease(KeyEvent.VK_C);
r.keyPress(KeyEvent.VK_COLON);    // : (colon)
r.keyRelease(KeyEvent.VK_COLON);
r.keyPress(KeyEvent.VK_SLASH);    // / (slash)
r.keyRelease(KeyEvent.VK_SLASH);
// etc. for the whole file path

r.keyPress(KeyEvent.VK_ENTER);    // confirm by pressing Enter in the end
r.keyRelease(KeyEvent.VK_ENTER);

这很糟糕,但它应该工作。请注意,您可能需要这些:如何让 Robot 键入 `:`?Convert String to KeyEvents(还有新的和闪亮的KeyEvent#getExtendedKeyCodeForChar(),它做类似的工作,但只能从 JDK7 获得)。

于 2013-09-16T08:44:36.903 回答