Selenium 上傳文件失敗,解決辦法一


昨個改程序遇到一個問題,UI上面有需要上傳文件的地方。但是我不知道怎么讓Selenium完成
點擊上傳文件按鈕->在彈出的文件選擇窗口中選擇路徑和文件,點確定。
要知道彈出窗口屬於window的范疇,Selenium只能處理Web page.
Jeremy原先的代碼用的是Selenium RC中的
type “filepath+filename”方法。可不知咋搞的反正運行到這里是進行不下去了。
正好借這個機會來研究一下在Webdriver里怎么做。
我自己寫了個網頁,里面就一句
我先是用Selenium IDE錄制了一下, 得到的結果就是:把選擇文件的操作變成了一句話type "path+name"。
RC中的type在Webdriver里對應的應該是webelement.sendkeys ,於是運行了一下真的管用。
不用擔心怎么處理彈出窗口的事兒,根本就是跳過了這一步嘛,多省心。
看來之前是我想太多了。

-----------------------------------------------------------------------------------------
上周我測的產品出了新版本,上傳文件這塊的UI代碼改動了一下。
用sendkeys這招竟然過不去,拋出了異常:
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
就是說這個input還在,就是不可見,所以不能sendKeys了。
辦法只有一個,就是用javascript把這個input給弄成可見的!
把這句document.findElementById('123').style.visibility='visible';放在selenium 中執行,可是上傳文件框還是沒出來。我的javascript和css都比較菜,對於顯示、隱藏頁面元素就只會這一招。正當無奈之際,發現firebug 里html下面,input 這一行是灰的。這應該說明它是隱藏的,可是改哪兒才能管用呢?

我選中了灰的這一行,右邊style里顯示出了css樣式 display:none
百度了一下display都有什么值,有none, inline, block...,我把none改成了block,頁面上出現了又大又丑的Selenium <wbr>Webdriver2.0 <wbr>處理upload <wbr>file <wbr>- <wbr>充補

所以:如果你想在做selenium webdriver 2.0自動化的時候遇到了界面里有“上傳文件”的需求,input type='file' 加了樣式被“美化”沒了,直接sendkey不行的時候,在sendkeys之前,用javascript把它給弄出來:
JavascriptExecutor j= (JavascriptExecutor)driver;
j.executeScript("document.findElementById('123').style.display='block'; ");
然后再WebElement.sendKeys ("c:\abc.txt");


就OK了!這樣雖然不太優雅,但也是沒有辦法中的辦法。必竟自動化代碼不能卡在這里過不去。文件上傳不上去,之后的一系列驗證工作都做不了。同理的還有下 拉菜單中的二級菜單,有時候一閃就沒,也可以把visiblility:hidden改成visible,同時設置好left和top值,讓它顯示出來。 就能繼續了。

附上我為了解決這個問題做的網頁(為了節省登錄產品的時間,我單獨做了一個網頁來模擬這個問題)
和在firebug里觀察到情況。

Selenium <wbr>Webdriver2.0 <wbr>處理upload <wbr>file <wbr>- <wbr>充補
來源:http://blog.sina.com.cn/s/blog_539a70d30101ajsg.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM