How to upload file Dynamically through AutoIt Script in Selenium? - java

Below are my AutoIt Script :
ControlFocus("Open","","Edit1")
ControlSetText("Open","","Edit1","C:\\project\\data\\data.csv")
ControlClick("Open","","Button1")
And Converting the file to exe which is used in the java file as below.
Runtime.getRuntime().exec("C:\\project\\script\\TestAutoIt3.exe");
Now I have to upload 10 files, I have two Questions here:
Can I pass the fileName dynamically and create exe files?
If I want to run this script in others system , the exe file will
not work because the project might be in some other path. How can I
handle this?
Thanks in Advance?

To upload file using Selenium + Java you need below code:
ChromeDriver driver = new ChromeDriver();
driver.get("http://page.com"); // This is the page with file upload field
WebElement fileInput = driver.findElement(By.xpath("//input[#type='file']"));
fileInput.sendKeys("C:\\Path\\To\\File.jpg");

Please use the answer given from Andersson, So that there is no headache of maintaining autoIt Files(exe/au3). And no extra work needed if you are using your code in someone else systems.

Related

Which MIME type for setting firefox Preference to automatically download .ebc file?

I am trying to download one file with extension .ebc (EBC File) in selenium Automation.
sample.ebc
I have tried below written Preferences, it is working for .Zip file or text file, but for .ebc file it is still giving me popup for save and openWith.
profile.setPreference("browser.download.folderList",2);
profile.setPreference("browser.download.manager.showWhenStarting",false);
profile.setPreference("browser.download.dir","C:\\Users\\userName\\Downloads");
profile.setPreference("browser.helperApps.neverAsk.openFile","text/x-ebc*,text/ebc,text/EBC,application/EBC,application/octet-stream,text/html, text/plain");
profile.setPreference("browser.helperApps.neverAsk.saveToDisk","text/x-ebc*,text/ebc,text/EBC,application/EBC,application/octet-stream,text/html, text/plain");
Thanks in Advance.
P.S: Don't want to use Robot Class or AutoIT.

Get path from inside a JAR File (for system property in selenium)

I am using Selenium Webdriver in Java for creating accounts from a excel file for a mediawiki software. I am working with eclipse.
When i try to export my project to a runnable jar file, there are some problems.
I have a file named "geckodriver.exe" im my resources folder (projectname/src/resources/geckodriver.exe)
All i want to do is to set a system property for selenium, so the user not have to manually choose the gecko driver file for working correctly with selenium.
This is my actual code, working inside eclipse
String filename = "geckodriver.exe";
File geckodriverFile = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
geckodriverPath = geckodriverFile.getAbsolutePath() + "\\resources\\" + filename;
And finally i want to set the system property
System.setProperty("webdriver.gecko.driver", geckodriverPath);
How can i achieve this to work inside a jar file?

How can I launch my local html file which in my workspace, on a vm/remote machine

I have a test scenario, where I load the html page and validate it for some css properties using selenium.
It works great on my local. Below is the code I use:
String inputFilePath = "src/main/java/elementspkg/fixtures/responsive.html";
String url = new File(inputFilePath).getAbsolutePath();
driver.get("file:///"+url);
Now I want to run the same test on a remote machine/vm for eg. SauceLabs. Now my test fails because the url that is launched on VM is the same as in my local.
I want to know to handle this scenario where my html file which is sitting in my project workspace, should always be invoked successfully irrespective of any remote machine that I run my test?
Could somebody please help. Greatly appreciated.
Answer:
What I did is, I spinned up a simple python server in the before_script tag in .travis.yml file
python -m SimpleHTTPServer &
Passed url as:
String url="http://localhost:8000/src/main/java/elements/fixtures/responsive.html"
driver.get(url);
And it works awesome!
Place the html file with-in automation project. e.g "project path/resources/html file" and give the generic path to pick the file.
Try
String inputFilePath = System.getProperty("user.dir") + "/resources/<html file>";
Note: "user.dir" is user working directory.

Webdriver : ChromeDriver : Accessing From Within Framework Jar File

I am developing a framework using selenium webdriver in Java. I have two maven projects. One is for the framework and other is for the test project.
In order to launch launch ChromeDriver, I need to set the system property with the path of the chromedriver.exe file. I am doing this in DriverFactory.java which is in /src/main/java of the Framework Project. Now, if I place the exe files in src/main/resources/drivers, Java complains that the file is not found. The code is :
private static String chromeDriverLocation = "drivers/chromedriver.exe";
File cDriver = new File(DriverFactory.class.getResource(chromeDriverLocation).getFile());
// Is it executable
if (!cDriver.canExecute()) {
cDriver.setExecutable(true);
}
System.setProperty("webdriver.chrome.driver", DriverFactory.class.getResource(chromeDriverLocation).getFile());
I tried placing this file in src/main/resources/drivers in the Test Project and modified the code like :
private static String chromeDriverLocation = System.getProperty("user.dir")+ "\\classes\\drivers\\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", chromeDriverLocation);
Though the above piece of code works in local when executed through Jenkins(Maven), I am not sure if this is the best way. Can someone suggest other good ways of achieving this ?
As an option, you may place the chromedriver.exe file into a directory added to PATH. In this case running the ChromeDriver will be as simple as creating an instance of new ChromeDriver() without dealing with system properties.
If you still would like to store chromedriver.exe under Resources, you may get it as steam, save to a file and set the "webdriver.chrome.driver" property:
InputStream in = getClass().getResourceAsStream("chromedriver.exe");
OutputStream out = new FileOutputStream("chromedriver.exe");
IOUtils.copy(in, out);

Configuration of Selenium 2 (WebDriver), using IE and upload file with WebDriver

How do I configure Selenium WebDriver? I have automated test cases using Selenium with Java. Now I need to automate upload and download of a file using WebDriver. I had added webdriver-common-0.9.7376.jar. I like to use Internet Explorer. How can I do that?
I'm just declaring variable and using driver
private static WebDriver driver;
driver.findElement(By.id(upload)).sendKeys("file to be upload");
Is this correct?
Ques. 1: How to configure WebDriver?
Ans: There are 2 ways: 1) Adding "selenium-server-standalone-2.29.0.jar" only
OR,
2) Adding "selenium-java-2.29.0.jar" and all the jars located on "selenium-java-2.29.0\selenium-2.29.0\libs" folder
You can download "selenium-server-2.29.0.zip" and "selenium-java-2.29.0.zip" from http://code.google.com/p/selenium/downloads/detail?name=selenium-server-2.29.0.zip and http://code.google.com/p/selenium/downloads/detail?name=selenium-java-2.29.0.zip respectively.
Extract them and you could get corresponding jar files to add.
Ques. 2: How to instantiate IE and how to upload file?
Ans: The java code as below:
File file = new File("C:\\Program Files\\Internet Explorer\\iexplore.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver();
driver.findElement(By.id("upload")).sendKeys("file to be upload");
If "File file = new File("C:\Program Files\Internet Explorer\iexplore.exe");" doesn't work download "IEDriverServer" and replace that line with below:
File file = new File("E:\\Ripon\\IEDriverServer_Win32_2.29.1\\IEDriverServer.exe");
[Note: You can download "IEDriverServer" from http://code.google.com/p/selenium/downloads/list ]
You need to add all jar after downloading selenium-java 2.25 0r any version. First add all jar then all all lib folder jar.
selenium-java-2.25.0.jar
selenium-java-2.25.0-srcs.jar and then all lib jar (Don't forget to add all lib folder jar)
Without instantiate driver for your browser, it won't open a browser window to do the upload/download operation. If you're using IE you've to write driver = new InternetExplorerDriver();
Instead of the old and outdated webdriver-common package, you probably need the newest selenium-java from http://code.google.com/p/selenium/downloads/list.
If you'll ever also need running Selenium RC locally, or Remote WebDriver ot Selenium Grid, you'll need the selenium-server package there (if you don't yet know what these are, just take selenium-java).
In both cases, for running InternetExplorerDriver, you'll also need the IEDriverServer from the page mentioned above. It's up to you whether to use the 32 or 64 bit version.
You can find an example of setting it up here in the documentation. If you dig around a bit, you'll find many more useful information in that documentation.
For example, for Internet explorer, you'll do:
System.setProperty("webdriver.ie.driver", "C:\\path\\to\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();
// your testing code
driver.quit();
Your method of uploading a file is correct.
And as of now (Selenium v2.29.0), you can't download files via any WebDriver. If you really want to do so, you'll have to find another way.

Categories

Resources