使用 Robot Framework Test 在浏览器中上传文件

Posted

技术标签:

【中文标题】使用 Robot Framework Test 在浏览器中上传文件【英文标题】:Upload a file in browser using Robot Framework Test 【发布时间】:2017-11-18 21:13:35 【问题描述】:

我正在为我的 Web 应用程序使用 Robot FrameworkSelenium 编写测试用例。我试图上传一个文件,但我不能失败。

我的代码是

*** Variables ***
$TVAURL     http://localhost:1500/
$Browser    Firefox

TC_01: Enter into the application
    [Documentation]   Enter into the application to upload a file
    Open Browser   $TVAURL     $Browser
    maximize browser window
    Choose File ........

html 文件:

<!DOCTYPE html>
<html>
<head>
<title>Upload File</title>
</head>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

我需要知道如何使用此 Choose File 进行此文件上传测试。我不知道该怎么做。我需要自动上传文件,无需任何第三方工具,如 Autoit 等,

我参考了以下http://robotframework.org/Selenium2Library/Selenium2Library.html#Choose%20File

此外,我也提到了以下问题

File Upload Option in Automation Testing Using Robot Framework https://github.com/robotframework/OldSeleniumLibrary/issues/108

但我找不到任何解决方案。请帮助我如何使用机器人框架,Pycharm Studio 中的 Selenium 来做到这一点。

回复答案 #1:@demouser123

我还是有问题,这里我附上了屏幕截图

它总是打开桌面,但失败了。请帮助我。

我试过下面的代码

*** Variables ***
$PO_AddShell     //*[@id="fileToUpload"]

click button  $PO_AddShell
Choose File   $PO_AddShell    E://Project/Publish/SampleTest.1500/rose.jpg

【问题讨论】:

当你说“它失败了”时,请说明错误。 @demouser123 - 我不知道如何指定命令。 【参考方案1】:

根据 Selenium2library 中给出的文档,使用 Choose File 关键字的语法是

Choose File  Locator  File_name

对于 WebDriver 可以与示例交互的对话框或输入,将执行类似的操作

Choose File id=fileToUpload  C://Downloads/Demo/Abc.txt

这里的C://Downloads/Demo/Abc.txt 是系统上保存文件的位置。将此更改为您自己的文件位置。

另外,我还记得这个解决方案,它最终也对我有用 - SO Post about uploading from a Windows directory。你也可以试试这个。

【讨论】:

它打开了文件打开对话框,但没有选择文件,也没有点击打开按钮。 你使用的路径和定位器是什么? Choose File xpath=.//div/input .$CURDIR\rose.jpg 所述图片存在于托管根目录中(即http://localhost:1500/rose.jpg) - 它总是打开桌面并且不会自动点击打开按钮。 我也收到以下错误Element locator 'xpath=.//div/input' 不匹配任何元素。`【参考方案2】:

我正在为这个问题提供替代解决方案。如果没收到请试试这个。

运行以下脚本的先决条件:

从SikuliX 在您的机器上安装 Sikulix,这很容易安装和安装 robotframework-SikuliLibrary。如果您需要更多选项SikuliX documentation,可以浏览文档。使用一些截图工具捕获下载路径/文件名等图像,并在以下脚本中更新名称。

*** Settings ***
Library          Selenium2Library
Library           SikuliLibrary

*** Test cases  ***
Login to Browser with download preferences
 [Documentation]   This one is without specifying download location
    Open Browser  https://www.docdroid.net/   Chrome
    Click Element   id=selectFiles
    Sleep   5
    SikuliLibrary.Click      /images/download.PNG
    SikuliLibrary.Click      /images/file.PNG
    SikuliLibrary.Click      /images/open.PNG

如果要指定下载位置,请使用以下脚本

*** Settings ***

    Library          Selenium2Library
    Library           SikuliLibrary

    *** Test cases  ***
    Login to Browser with download preferences
     [Documentation]   You can specify your download location
        Open Browser  https://www.docdroid.net/   Chrome
        Click Element   id=selectFiles
        Sleep   5
        SikuliLibrary.Input Text           /images/file_path.PNG     C:\\Users\\Madhu\\Downloads
        Press Special Key        ENTER
        #SikuliLibrary.Click      /images/download.PNG
        SikuliLibrary.Click      /images/file.PNG
        SikuliLibrary.Click      /images/open.PNG

【讨论】:

感谢您的回答。我在周末,所以我会在下周一测试这段代码...... Sikuli 是一种适用于有限本地测试的工作解决方案,但它无法使用无头浏览器(幻象,无头模式下的 chrome),远程 selenium - selenium hub,或云的浏览器堆栈,酱实验室,等等。因此我不建议在测试中设置这种硬依赖。 谢谢@Todor ..我不知道这一点..如果我想在无头模式下使用 sikuli 是否有其他选择.. 不,我不知道;这就是“无头”的重点——没有 UI 可以交互,没有人/sikuli 可以点击或发送击键:)。因此,使用 RF 的原生 Choose File 通常是可行的方法 - 它实际上所做的是通过 SE 将路径作为输入字段的键发送。另一方面,html5 花式 js 上传器存在问题 - 但这是另一个话题 :) 好的,感谢您提供信息。【参考方案3】:

使用robotframework 中的autoit 库,您可以将文件上传到应用程序。即使系统被锁定,此解决方案也有效。

在窗口对话框中输入文件名并点击发送

run keyword if  '$Browser' == 'Chrome'  File upload in Chrome browser
...   ELSE IF  '$Browser' == 'Firefox'  File upload in Firefox browser

在 Chrome 浏览器中上传文件

control focus  [CLASS:#32770; TITLE:Open]  $EMPTY  [CLASSNN:Edit1]
control send  [CLASS:#32770; TITLE:Open]  $EMPTY  [CLASSNN:Edit1]  C:\\File_Upload\\Test_Upload
control click  [CLASS:#32770; TITLE:Open]  $EMPTY  &Open

火狐浏览器上传文件

control focus  File Upload  $EMPTY  [CLASSNN:Edit1]
control send  File Upload  $EMPTY  [CLASSNN:Edit1]  C:\\File_Upload\\Test_Upload
control click  File Upload  $EMPTY  &Open

【讨论】:

【参考方案4】:

你不应该使用

click button  $PO_AddShell

只使用选择文件而不点击

【讨论】:

以上是关于使用 Robot Framework Test 在浏览器中上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Robot Framework-Test setup Teardown 具体到测试用例

在 Robot Framework 中减去两个 dict 值

Robot Framework重点

Robot Framework - 从不同位置导入具有 2 个类的库

Robot Framework - 访客界面 - 如何获取关键字的关键字子项?

Robot Framework自定义测试库导入时的问题解决(Importing test library XXX failed )