当前位置: 首页 > 面试题库 >

Selenium WebDriver-将文档上传到非输入按钮

司空健
2023-03-14
问题内容

我需要使用Chromedriver通过Selenium
WebDriver上传文档。我已经尝试了所有Action类和Javascript内容,但是这些都不起作用。我假设它们不起作用,因为那些依赖按钮作为输入字段,但是,我正在处理的上传按钮却没有。HTML看起来像这样:

<a id="Dialogs_Dialogs_lbAttachUpload" onclick="return ButtonVerifyEnabled(this, ShowFileSelect);" class="SkinButton sbBlue" onmouseover="ButtonHover(this,30);" onmouseout="ButtonLeave(this);" onmousedown="ButtonDown(this,30);" onmouseup="ButtonHover(this,30);" skinheight="30" style="color: white; width: 132px; height: 30px; line-height: 30px; background-position: 0px 0px;" title=""><div class="SkinButtonLeft" style="background-position: 0px 0px;"></div><div class="SkinButtonRight" style="background-position: -4px 0px;"></div>Upload documents</a>

我已经实现并运行了AutoIT和Sikuli,但是这些解决方案的问题在于,通过Jenkins运行Selenium测试时,我无法使它们正常工作。

我最近的尝试是这样的:

    WebElement upload = SConfirmOrder.uploadDocuments_btn(driver);
    Actions actions = new Actions(driver);
    actions.moveToElement(upload);
    actions.sendKeys("filepath\\Test PDF.pdf");

它运行成功,但是实际上没有任何文档上载。


问题答案:

浏览器无法上传没有<input>元素的文件,除非文件已从桌面删除。能够通过代码上传文件将构成安全漏洞。

因此,在您的情况下,<input>可能是在用户单击链接后创建的。

处理这种情况的一种方法是使click事件静音,单击链接,然后将文件设置为<input>

// disable the click event on an `<input>` file
((JavascriptExecutor)driver).executeScript(
    "HTMLInputElement.prototype.click = function() {                     " +
    "  if(this.type !== 'file') HTMLElement.prototype.click.call(this);  " +
    "};                                                                  " );

// trigger the upload
driver.findElement(By.id("Dialogs_Dialogs_lbAttachUpload"))
      .click();

// assign the file to the `<input>`
driver.findElement(By.cssSelector("input[type=file]"))
      .sendKeys("filepath\\Test PDF.pdf");

请注意,您可能还需要等待的<input>创建。



 类似资料:
  • 我正在NetSuite中构建一个动态的PDF。我想使用DocuSign REST API将它上传到一个新的DocuSign信封。我看过很多答案,但我少了点什么。我发现自己在API和在线上兜圈子。 在用于[创建信封][1]的DocuSign REST API中,它详细说明了如何将文档添加到信封中,特别是使用documents节点:

  • 问题内容: 我正在寻找一种将文件中的音频数据馈送到麦克风的方法,因此,当第三方应用程序(例如 arecord 或Chromium的“按语音搜索”功能)使用麦克风进行音频输入时,它们会从文件中接收音频数据代替。 这是我的情况 :我编写的一个应用程序记录了来自麦克风的音频数据(使用ALSA)并将其保存到文件(audioFile0.raw)中。在将来的某个未知时间点,某些未知的第三方应用程序(例如,我没

  • 我正在尝试将json对象上传到AWS Cloudsearch。以下是我创建索引字段的全部代码: 当从rails控制台运行create_index_字段时,它显示字段已创建,但当我去上传文档时,它表示找不到具有我定义的不同字段名的字段。 定义散列以转换为json对象: 和文档上传rake任务: 最后是我的错误: 我是不是忘了初始化什么东西或者发生了什么?任何帮助都将不胜感激。希望我已经给了你足够多的

  • 上传新文档 请求header POST /v1/activities/{频道id}/uploadDoc Authorization:Bearer {ACCESS TOKEN} 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{频道id}"替换您需要获取的频道id 请求payload 请使用 multipart/form-data Filedata -> 文件

  • 我想上传多输入文件。我尝试了下面的代码,但文件没有上传,我无法获得上传目录。 HTML 控制器 我也尝试用下面的代码获取上传的数据,但为什么总是出现错误?

  • 问题内容: 我一直在为FF写我的脚本,但希望他们所做的工作很少,它们也可以在其他浏览器上运行,但是IE驱动程序似乎存在按钮问题? 我在按钮上有一个简单的webelement.click(),不会引发错误,但不单击按钮。在FF它的罚款。我可以获取文本,获取价值,所以我知道find语句是可以的,只是不会单击它。 想法或帮助会很棒 只是做 HTML-控件上有3个按钮,我现在只对登录感兴趣 问题答案: 遇