1. 程式人生 > >SELENIUM 處理WINDOWS 上傳 視窗

SELENIUM 處理WINDOWS 上傳 視窗

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();