2015-11-18 65 views
3

我有一個AngularJS SPA,用戶可以使用flow.js來上傳文件,更確切地說,我使用它的包裝ng-flow如何測試使用硒進行flow.js上傳?

現在我正在用Selenium設置自動化e2e測試,但我無法弄清楚如何在用戶單擊flow-btn元素時以及何時使用拖放操作來測試前述上傳機制。

周圍的Googling我發現this page它說,在網絡驅動程序無法識別該對話框後點擊flow-btn打開,但是,由於這最後不是<input>元素,而只是一個<span>(the only way to use a flow-btn),我可以」不要使用鏈接頁面中建議的解決方案。

有關如何測試使用Selenium進行flow.js文件上傳的任何想法?

+1

你曾經這樣做過嗎? – Ben

+0

沒有。你有沒有同樣的問題,是嗎? – Gargaroz

回答

0

不知道這是否有幫助...我們使用nightwatch.js來測試我們的應用程序,並有單個文件的flowJS上傳按鈕。

爲了得到這個工作,我不得不使隱藏文件輸入可見和啓用。然後我可以用文件位置填充它並提交。

一些樣品nightwatch.js

//Re-enable traditional file-input 
    this.api.execute(function() { 
     document.getElementById('proof-upload-fallback').className = ''; 
     document.getElementById('proof-upload-fallback').disabled = false; 
    }); 

    this.api.setValue('//input[@id="proof-upload-fallback"]', require('path').resolve(filePath)); 

    //Click upload 
    this.api.clickModalButton('Upload'); 

我們的HTML看起來像:

<input id="proof-upload-fallback" type="file" flow-btn="" ng-show="false" ng-disabled="true" class="ng-hide" /> 

<button flow-btn="" focus-input="focusButton">Select PDF<input type="file" style="visibility: hidden; position: absolute; width: 1px; height: 1px;"></button> 

Submit: <button ng-click="ok()">Upload</button> 

的NG-點擊= 「OK」 負責處理flow.js,代碼的重要組成部分是執行()是JS通過硒驅動程序傳遞給實際的Web應用程序...

0

這是一個工作示例上傳當前腳本的上傳與flowjs

const remote = require('selenium-webdriver/remote'); 
const path = require('path'); 

browser.ignoreSynchronization = true; 
browser.setFileDetector(new remote.FileDetector); 


describe('test suite', function() { 

    it('should upload a file remotely', function() { 

    browser.get('http://flowjs.github.io/ng-flow/'); 

    element(by.xpath("//span[.='Upload File']/input")) 
     .sendKeys(path.resolve(__dirname, __filename)); 

    browser.sleep(5000); 

    expect(element.all(by.css("div[ng-repeat='file in $flow.files']")).count()).toEqual(1); 
    }); 

});