昨個改程序遇到一個問題,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 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裏觀察到狀況。
來源:http://blog.sina.com.cn/s/blog_539a70d30101ajsg.htmljavascript