jainajay26 Posted September 16, 2014 Share Posted September 16, 2014 Dear All, I am new to AutoIT tool and need your help. I am trying to automate an application testing using AutoIT. One of the step in testing is to print the report. Once the print window pops up to select printer to print, I am not able to read the print listview control using autoit. It does not read the text from print listview. Can you please help me on how can I select one particular printer in print window using AutoIT. Thanks a lot! Link to comment Share on other sites More sharing options...
JohnOne Posted September 16, 2014 Share Posted September 16, 2014 It is customary to post a basic code reproducer of your problem. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
jainajay26 Posted September 16, 2014 Author Share Posted September 16, 2014 I found the solution, here is the code that worked for me: Func Main() Local Const $dialogTitle = "Print" Local Const $timeout = 20 ; Printer name should be a command line argument. Local Const $printerName = "Printer Name" Local $windowFound = WinWait($dialogTitle, "", $timeout) ; For some reason if the print dialog contains the list view (see below) ; and the window did not exist before starting WinWait, then the ; window returned seems to be something transient that we can't work ; with. Therefore, try to find the window again. Unclear why this ; would be necessary, but this seems peculiar to this type of print ; dialog. $windowFound = WinWait($dialogTitle, "", $timeout) Local $windowHandle If $windowFound Then ; Get the last window used by an AutoIt function, namely the window ; we were waiting for. $windowHandle = WinGetHandle("[LAST]") Else ConsoleWrite("Could not find window " & $dialogTitle & @CRLF) Exit(1) EndIf Local $listViewHandle = ControlGetHandle($windowHandle, "", "[CLASS:SysListView32; Text:FolderView]") If $listViewHandle <> "" Then ; ControlListView sometimes doesn't work if this script is compiled as 32-bit ; and the application that is printing is 64-bit, or vice versa. ; See the documentation for ControlListView. ConsoleWrite("Using listview" & @CRLF) Local $printerIndex = ControlListView($windowHandle, "", $listViewHandle, "FindItem", $printerName) ConsoleWrite("index: " & $printerIndex & @CRLF) If $printerIndex < 0 Then ConsoleWrite("Could not find printer " & $printerName & " in print list view" & @CRLF) Exit(1) EndIf ControlListView($windowHandle, "", $listViewHandle, "Select", $printerIndex) ; Enable the statement below to print. ; ControlClick($windowHandle, "", "[CLASS:Button; Text:&Print]") Else ; We have an old-style print dialog. ; Unlike the print dialog with the list view used above, a ; 32-bit/64-bit combination of script and application (or vice versa) ; is not a problem. ConsoleWrite("Using combo" & @CRLF) ControlCommand($windowHandle, "", "[CLASS:ComboBox; INSTANCE:1]", "SelectString", $printerName) ; Enable the statement below to print. ; ControlClick($windowHandle, "", "[CLASS:Button; Text:OK]") EndIf ; Enable the statement below to cancel printing. ; ControlClick($windowHandle, "", "[CLASS:Button; Text:Cancel]") EndFunc Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now