【问题标题】:Unrecognized file type in selenium pythonselenium python中无法识别的文件类型
【发布时间】:2016-09-12 14:53:11
【问题描述】:

所以我正在测试一个 Web 客户端,它与一个对我上传的文本文件执行某些操作的引擎进行通信。所以基本上,我选择一个要上传的文件,一旦上传了这个文件,我可以按开始,引擎会做它的事情并返回一个结果。我正在尝试在 python 中使用 selenium 测试前端。此 Web 客户端接受 zip 或 txt 文件。这个 Web 客户端的开发人员做了这样的设置,当上传 zip 或文本以外的文件类型时,它会给出类似这样的错误

File type "audio/wav" is not supported: Must be one of "text/plain", "application/zip", "application/zip-compressed", "application/x-zip-compressed".  

在这种情况下,我尝试上传 wav 音频文件。当我尝试手动上传 zip 文件时,它按预期工作。但是,当我在 selenium 中使用相同的文件尝试相同的过程时,它不再识别文件类型并给我这个错误

File type "" is not supported: Must be one of "text/plain", "application/zip", "application/zip-compressed", "application/x-zip-compressed". 

所以文件类型无法识别。这是我用来上传文件的内容:

choose = self.driver.find_element_by_id("chooseButton")
time.sleep(1)
#clicks to open upload window
choose.click()
time.sleep(1)
#ZIp file with other zips
pyautogui.typewrite("C:\\Transcriber\\Framework\\test\\audio\\Nested.zip")
time.sleep(1)
pyautogui.press('enter')

我正在使用 pyautogui 来操作当我单击上传按钮时弹出的上传窗口,所以就好像我正在自动化我的键盘一样。 time.sleep 只是为了确保在动作之间提供足够的时间,以便一个动作在下一个动作开始之前结束。

我的 zip 只是一个普通的 zip 文件。当我在硒中运行它时,它给了我上述错误。有谁知道是什么问题?这是一个python问题吗?提前致谢。

编辑:仅当我尝试上传 zip 文件时才会出现此问题,如果我将测试用例中的 zip 文件替换为 txt 文件,则可以正常工作。

Edit2:我的测试用例完成后,如果我让浏览器保持打开状态,即使我尝试手动上传,错误仍然会发生。所以这似乎只发生在由 selenium 产生的浏览器实例中。否则,如果我自己打开一个新的浏览器,上传一个 zip 文件就可以了。

【问题讨论】:

  • 选择上传文件时,是鼠标选择还是输入路径?如果你像 pyautogui 一样输入路径并按下回车会发生什么?可能文件名没有被拾取,它正试图将一个空文件名传递给上传者,因此出现“不支持文件类型”错误。
  • 所以,在我上面的代码中,我使用 pyautogui 输入它,因为当上传窗口弹出时硒不再具有控制权,所以我需要“手动”输入键。当我监视测试时,我可以看到路径已完成,因为在按 Enter 之前有 1 秒的暂停以确保它已完成打印。我已经在手动测试中尝试了确切的路径并且它有效。当然,在我的手动测试中,我必须删除双反斜杠。

标签: python unit-testing selenium file-upload


【解决方案1】:

Python + selenium 还为您提供了直接上传文件的选项。

我不确定您的情况是否属实,因为我没有“选择”元素的完整 html。

在我的例子中,我有一个 input[type=file] 元素,这很有效:

driver.find_element_by_css_selector('input[type="file"]').send_keys(path+filename)

根据您的情况,之后您可能需要单击确定/提交按钮。

希望这会有所帮助!

更多信息例如这里:How to upload file ( picture ) with selenium, python

【讨论】:

  • <div id="dropDiv" class="ui center aligned segment" data-reactid=".0.1.1.2.4.0.0"><span data-reactid=".0.1.1.2.4.0.0.0">Drag or </span><a href="#" id="chooseButton" class="chooseDiv" data-reactid=".0.1.1.2.4.0.0.1">choose</a><span data-reactid=".0.1.1.2.4.0.0.2"> WAV/JSON files here.</span><br data-reactid=".0.1.1.2.4.0.0.3"><input id="files" class="hiddenElement" name="files[]" data-reactid=".0.1.1.2.4.0.0.4" type="file"></div> 不确定这是否有帮助,但我已经尝试过您的方法,但在我的情况下似乎不起作用
  • 行为有什么不同吗?还是它给出了同样的信息?感谢您提供此信息。它并没有像我想要的那样帮助我,所以我希望其他人可能知道更多!但是:您是否使用元素 #files 尝试过我的建议?
  • 我之前尝试过sendKeys,但我不知道我之后也必须单击它,但话虽如此,即使我之后按下它也没有任何反应。上传窗口仍然弹出。这就是我不得不求助于使用 pyautogui 来“手动”输入路径并按 Enter 的主要原因。奇怪的是(也许我也应该在我的问题中提到它),当我上传常规文本文件时它似乎工作正常,所以在同一个测试用例中,如果我将 zip 文件更改为 txt 文件,我没有问题
  • 啊,这看起来很有趣!会不会是 zip 更大,不知何故需要更多时间,然后你的脚本运行得有点太快了?您是否尝试过使用非常小的 .zip 文件?
  • 不,所有拉链都不起作用。这个 Web 客户端的开发人员现在实际上已经更改了它,以便它接受以 .zip 结尾的任何内容,但是如果我找不到答案,这个问题将继续困扰我直到时间结束......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2013-10-12
  • 2013-06-05
  • 1970-01-01
相关资源
最近更新 更多