During automated testing using Selenium-2 we are clicking on the link and which opens the "File Download" window. And I want to click on "save" button and save the file to the disk.
Selenium2 doesn't support handling of filedownload on its own. So I have written a AutoIT script to click on the save button and it works successfully if we are testing the web application on the local machine. In remote machine if I am running this script it hangs if I close the Remote Desktop (RDP).
One thing is we don't know what will be the link which will be clicked. We will be only knowing that one "File Download" window is existing and which may not be on the top or active. But I need to click on save button.
So, is it possible to handle file download popup window in other way?
If we can handle it AutoIT then its very good. but other than AutoIT suggestions are also welcome. Like if we can do using some other APIs or scripts. But to run the script/solution it would be good if we do not need to install any other software.
Related
I am testing web site functionality with Selenium using Java from Eclipse. One test is to click a "download" button, look for a popup window (this is another selenium window), respond to that window which should then cause a Windows download dialog to pop up (please see attached image).
Please note. I do not have to actually download the file. Just verify that the windows dialog popped up.
I know from experience (or at least am unaware) that Selenium can actually access the Windows download box, choose a file location and start the download. But all I need to do is verify that the download box popped up. Exiting the chromedriver will kill the download window so it won't linger but I still need to verify it was created.
Any suggestions? One thing I tried was having the task manager open. I thought I could find a process corresponding to the dialog box, but there were 119 processes before the dialog box came up as well as when it was up. So any suggestions what to do?
I could add as an aside that someone wrote a workaround to actually download the file. Instead of clicking on a button or link he pretended to be the Windows dialog box and accepted the download. That, for reasons I stated above, will not work in this instance as I have to verify the actual results of clicking the button.
Please see my attached image for an example of the dialog box.
One workaround to meet this test requirement is, once you responds to the window which results in a Windows download dialog, try performing the next action. This will result in a WebDriverException as the access to UI will be blocked by the Windows dialog. You can then catch this WebDriverException and in the catch block press escape key using Robot class in Java. Following is an example:
try {
//1) Respond to the window that results in Windows dialog box.
//2) Perform the next action on UI.
} catch (WebDriverException we) {
//3) You can capture screen shot as well at this stage.
System.out.println("Most likely Windows dialog appeared.");
//4) Press escape key using Robot class in Java
Robot r = new Robot();
r.keyPress(KeyEvent.VK_ESCAPE);
}
You can use AutoIT to check if the windows dialog appears, then save the status of the windows dialog in somewhere(eg. a temp file), then you read the status of the windows dialog using Java from Eclipse
I work on Eclipse Luna on my windows 7, the java version insatlled on the computer itself is up to date.
I build some simple JApplet to see how it runs on an html page in my computer. I mean not through
'run as applet' in eclipse, rather on a real html page.
But I can not run it due to the restriction - "Application blocked by java security". How can I see it? do I must get certificate for just simple trial?
If yes, how to do it with eclipse? Is it a short procedure? Can I see the applet runs without it?
Thanks in advance, Liron
Are you sure that you have enabled Java for your web browsers? Here are instructions for Internet Explorer:
Click Tools and then Internet Options
Select the Security tab, and select the Custom Level button
Scroll down to Scripting of Java applets
Make sure the Enable radio button is checked
Click OK to save your preference
Here is an "Hello World" applet is given on Oracle's it works online. Oracle has also provided these tutorial as offline version. In download files of same website applets are not working rather these are being blocked by Java setting. There was also message that I can change security settings from Java Control Panel. I changed settings from high to medium but applet is sill being blocked by Java.
Click on the Start button and then click on the Control Panel option.
In the Control Panel Search enter Java Control Panel.
Click on the Java icon to open the Java Control Panel.
In the Java Control Panel, under the General tab, click Settings under the Temporary Internet Files section. The Temporary Files Settings dialog box appears.
Click Delete Files on the Temporary Files Settings dialog. The Delete Files and Applications dialog box appears.
Click OK on the Delete Files and Applications dialog. This deletes all the Downloaded Applications and Applets from the cache.
Click OK on the Temporary Files Settings dialog. If you want to delete a specific application and applet from the cache, click on View Application and View Applet options respectively.
Now try to run your applet again and it should work.
Is there a way to check(for automation testing) whether a dowload has started or not, when clicked on a download button (clicked using selenium)?
Assume that save dialog box has been supressed in whichever browser I use
No, AFAIK with Selenium you cant check if download is in progress. But you can check the file once it is downloaded.
Link for more details.
I need to manipulate Popups & Download Dialogs of IE browser using either Java or
Javascript based automated solution.
I tried with selenium2 but its not working properly so any other suggestion for the same.
Actually selenium2 does not provide proper handling of alert/download dialogs so
I am thinking to use some other javascript/java solution.
With Download Dialog: I need to save the downloaded file to particular location.
With Alerts Dialogs: I need to check the displayed message and click on the particular button.
Any suggestion is appreciated.
Thanks.
I use selenium 1 and it works well to handle popups in my application.
//Click on browse file button, open a popup
selenium.click("//input[#value='Browse...']");
//waiting for popup to load
selenium.waitForPopUp("_Dialog", "30000");
//selecting the popup by passing window name
selenium.selectWindow("name=_Dialog");
//click a link inside pop up window
selenium.click("link=something");
//Put other popup operations here
//click cancel button for pop up
selenium.click("cancel");
//back to main window
selenium.selectwindow("null")
To get the message from alert boxes, use selenium.getAlert();. This will return the message contained in the alert box as String.
Also, sometime you will need to check, whether alert has occurred before switching to it.
int noofWindows = selenium.getAllWindowNames().length;
if (noofWindows > 1){
//selects the second window
selenium.selectWindow(selenium.getAllWindowIds()[2]);
//Prints the message in the alert window
System.out.println(selenium.getAlert());
}
If it is not a necessity to run test in IE, use firefox(*chrome) and close all other windows before executing the code.
I hope this helps you.
*All the mentioned code is for handling JavaScript pop-ups. I'm not sure whether this will work for Vb-script or not.
EDIT
I think IE download pop up is a windows event so cannot be handled by selenium directly, for this you'll have to use Java AWT or AutoIT.
AutoIT script should be something similiar to
WinWaitActive(windowTitle)
ControlClick(windowTitle,"",buttonName)
and save it as IEsave.exe. NOTE: I'haven't tried this AutoIT script.
now you have execute IEsave.exe from your program. I'm using java here.
java.lang.Runtime.getRuntime().exec("c:/IEsave.exe");
This will execute the file which in-turn will handle the save button event for windows.
You can create similar exe files for handling other window's events.
Hope this solves your problem.