SELENIUM 處理WINDOWS 上傳 視窗
阿新 • • 發佈:2018-12-04
selenium無法控制windows視窗,故需要引用第三方工具autoit.
對於下圖視窗,selenium是無法定位控制的,可以使用finder tool來檢視檔名的屬性,class等
1.可以使用autoit工具將以下程式碼儲存為.au3格式,然後run ,成為.exe格式,在程式碼中呼叫
var Autoit = new AutoItX3(); const string widowTitle = "[Class:#32770]"; //上傳視窗的類名:Class:#327700 Autoit.WinWait(widowTitle, "File Upload", 1); //暫停執行指令碼,直到上傳對話框出現 Autoit.WinActivate(widowTitle, "File Upload"); //啟用上傳視窗 Autoit.ControlFocus(widowTitle, "File Upload", "[CLASS:Edit; INSTANCE:1]"); //控制焦點在輸入框上 //Autoit.ControlSetText(widowTitle, "", "[CLASS:Edit; INSTANCE:1]", "D:\\temp\\Desert.jpg"); //這行程式碼是另一個輸入路徑的方法 Autoit.Send(@"D:\123.jpg"); //輸入檔案路徑
在程式碼中呼叫,此程式(Helper.RunProgram為封裝好的一個方法)
Helper.RunProgram(Helper.GetCurrentDllDir.Replace(@"bin\Debug\", "") + "AutoitScriptExe\\xxx.exe")
2.或者直接引用:AutoItX3.dll
然後直接在vs上寫:
var Autoit = new AutoItX3(); const string widowTitle = "[Class:#32770]"; //上傳視窗的類名:Class:#327700 Autoit.WinWait(widowTitle, "File Upload", 1); //暫停執行指令碼,直到上傳對話框出現 Autoit.WinActivate(widowTitle, "File Upload"); //啟用上傳視窗 Autoit.ControlFocus(widowTitle, "File Upload", "[CLASS:Edit; INSTANCE:1]"); //控制焦點在輸入框上 //Autoit.ControlSetText(widowTitle, "", "[CLASS:Edit; INSTANCE:1]", "D:\\temp\\Desert.jpg"); //這行程式碼是另一個輸入路徑的方法 Autoit.Send(@"D:\123.jpg"); //輸入檔案路徑
第二種方式:
通過控制檯輸入程式碼發現:
document.querySelector('#fileToUpload').className='12'
顯示input:
使用js執行控制上傳
var js_UploadFile=string.Format("document.querySelector('#fileToUpload').className='12'"); ((IJavaScriptExecutor) driver).ExecuteScript(js_UploadFile); driver.FindElement(By.Id("fileToUpload")).SendKeys("D:\\log.txt"); driver.FindElement(By.CssSelector("table.table-pw_next a.btn_upload")).Click();