通过Selenium在AngularJS中自动上传文件

时间:2014-11-03 18:06:17

标签: javascript angularjs selenium selenium-webdriver

我使用Powershell驱动.NET Selenium和FirefoxDriver来自动化一些东西。部分原因是文件上传,网站恰好用AngularJS编写(至少部分)。

现在我已经想出如何使用普通的输入元素自动执行文件上传。只需通过SendKeys发送文件路径。

但我无法弄清楚这种情况。带有可选手动文件选择器的文件放置区的HTML如下:

<div class="overflowHidden video-drop-zone file-drop-zone zone appversionicon rounded"
ng-file-drop="onFileSelect($files);" ng-file-drop-available="dropSupported=true">               
    <div class="simpleDropZoneFileSelect">
        <span class="selectFileText">
            <span class="ng-binding ng-hide" ng-show="dropLabel !== undefined &amp;&amp; dropLabel !== ''"><br></span>
            <a class="ng-binding" href="" ng-show="true">Select file</a>
            <input class="" ng-show="true" ng-file-select="onFileSelect($files)" type="file">
        </span>
    </div>
</div>

我希望我没有过多地简化这一点。对于整个AngularJS设置肯定会有更多。但也许这足以让你给我一些指示,看看下一步该在哪里或如何处理它。如果没有,请告诉我,我会添加更多信息。

我发现Protractor似乎是进行AngularJS测试时的方法,但它会大大改变我的设置(使用NodeJS服务器等),我现在需要的就是上传文件。

谢谢!

桑德罗

2 个答案:

答案 0 :(得分:3)

不确定整个设置的样子。但是在selenium中文件上传要容易得多。

Driver.FindElement(By.CssSelector("input[type='files']")).SendKeys("FilePath") 

应该这样做

答案 1 :(得分:0)

<button class="btn btn-primary ng-scope" ng-click="vm.importAccountsClicked()" translate="import-accounts">Import Accounts</button>
<input class="hide" type="file" id="fileItem" accept=".csv" onchange="angular.element(this).scope().import()">

我在使用Webdriver和Java时遇到了类似的问题。使用“导入帐户”按钮(上面的html代码段)查看网页,我无法让Selenium + Java向其发送密钥。我犯的错误是我没有使用type = file属性来识别元素。相反,我使用按钮的文字:

@FindBy (xpath="(//button[.='Import Accounts'])")
private WebElement importbutton;

因此我将importbutton变量声明更改为

@FindBy (id = "fileItem")
private WebElement importbutton;

使用sendKeys()方法解决了该问题。

importbutton.sendKeys(filepath);

希望这有帮助。