我使用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 && 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服务器等),我现在需要的就是上传文件。
谢谢!
桑德罗
答案 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);
希望这有帮助。