How to use Ctrl+Shift+R in selenium webdriver - java

Ctrl+Shift+R is the shortcut key for a hard reload and refresh. How can I apply this shortcut in selenium Java?
I tried with following code but could not get the results.
String selectAll = Keys.chord(Keys.CONTROL,Keys.SHIFT,"r");
driver.findElement(By.tagName("html")).sendKeys(selectAll);
I also tried with action class. But it is not working.
PS: No errors were displayed. But, it does not perform the action and Ctrl+A is working.

To refresh and reload WebPage you can simulate the usage of Ctrl+Shift+R through:
driver.navigate().refresh();

You can try Robot class as an alternative to perform Ctrl+Shift+R
import below packages :
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
And use below code :
Robot robot = new Robot();
// press key Ctrl+Shift+r
robot.keyPress(KeyEvent.VK_CONTROL);
robot.delay(100);
robot.keyPress(KeyEvent.VK_SHIFT);
robot.delay(100);
robot.keyPress(KeyEvent.VK_R);
// relase key Ctrl+Shift+r
robot.delay(100);
robot.keyRelease(KeyEvent.VK_R);
robot.delay(100);
robot.keyRelease(KeyEvent.VK_SHIFT);
robot.delay(100);
robot.keyRelease(KeyEvent.VK_CONTROL);
Important Note: Don't forget to release all the key (keyRelease) what you have used in keyPress to perform your action using Robot class, else you may observe unexpected keyboard behavior.

Related

How to handle Firefox browser confirmation messages in Test Automation?

I am currently working on the selenium+java test automation project.
I have encountered a problem that while running many test classes together in testng.xml, firefox display
confirm resubmission popup. when I am running a single class this message does not popup. This confirmation popup comes when the last set of classes begins to run. How can I resolve this problem?
May be, you can try to simulate pressing Enter key or Spacebar and see if that works.
import java.awt.Robot;
import java.awt.event.KeyEvent;
public void pressEsc(WebDriver driver) {
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} catch (Exception e) {
e.printStackTrace(); }
}

Switching Apps on Mac with AWT Robot only sometimes works

I'm trying to use Robot in order to switch apps, and then enter some text. To do this (on my mac), I'm pressing Meta, Tab, and then releasing Tab, Meta in this order:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_META);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_META);
This works, but only occasionally (about every 5 or six presses). I've tried calling Thread.wait() inbetween press and release, but this has no effect. Neither does trying to mask Tab with META_DOWN_MASK. I also tried using the JavaFX Robot (com.sun.glass.ui.Robot), but the JavaFX version doesn't work at all.
Ah.. Seems that I need to specify a delay between the events. Updated:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_META);
robot.delay(300);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_META);

Java Webdriver: How to save the page same as "save page as" in firefox?

Similar question asked below
How to save complete web page
But there is no answer yet. The expected result is to get many files, some file to store image, etc.
I used the following,it will pop up a windows saying to save the file
val a=new FirefoxDriver()
a.get("http://www.baidu.com")
val b=new Actions(a)
b.action.keyDown(Keys.ALT).keyDown(Keys.F4).keyUp(Keys.ALT).perform();
But then how to click the save button? The following doesn't work
b.sendKeys(Keys.ENTER)
We can use Robot utility in Java to handle this:
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
Robot robot = new Robot();
// press Ctrl+S the Robot's way
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_S);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_S);
Thread.sleep(2000L);
// press Enter
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
To use Robot utility you have to import following Java utilities:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
When you use Robot utility the x axis and y axis has to be metioned appropriately however it will differ system to system instead we can use AUTO IT.
You can refer here http://www.autoitscript.com/forum/forum/9-example-scripts/

How to press 'Enter' without targeting a WebElement

I make tests with WebDriver and at a moment a popup appears, with no fixed attribute (auto-generated).
So, the simplest way (I think) is to press the key 'Enter' on the keyboard.
But I can't find the way to say 'Just click on the browser, not on an element of the browser'.
It's possible with WebDriver? How can I achieve it?
An alternative is to use the java.awt.Robot to simulate a keyboard's interaction and not a WebElement's treatment.
[WebDriver code]
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(200);
}
[WebDriver code]
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER); //press enter key
robot.keyRelease(KeyEvent.VK_ENTER); //release enter key
You should specify the release command also while the enter key has been pressed.
Using Actions utility we can achieve the same:
Actions builder = new Actions(driver);
builder.keyDown(Keys.RETURN).keyUp(Keys.RETURN).build().perform();
You can do something like this
driver.findElement(By.tagName("body")).sendKeys(Keys.ENTER);

One solution for File Upload using Java Robot API with Selenium WebDriver by Java

I saw that lots of people have Problems uploading a file in a test Environment with Selenium WebDriver. I use the selenium WebDriver and java, and had the same problem. I finally have found a solution, so i will post it here hoping that it helps someone else.
When i need to upload a file in a test, i click with Webdriver in the button and wait for the window "Open" to pop. And then i copy the path to the file in the clipboard and then paste it in the "open" window and click "Enter". This is working because when the window "open" pops up, the focus is always in the "open" button.
You will need these classes and method:
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
public static void setClipboardData(String string) {
StringSelection stringSelection = new StringSelection(string);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
And that is what i do, just after opening the "open" window:
setClipboardData("C:\\path to file\\example.jpg");
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
And that´s it. It is working for me, i hope it works for some of you.
Actually, there is an in-built technique for this, too. It should work in all browsers and operating systems.
Selenium 2 (WebDriver) Java example:
// assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.xpath("//input[#type='file']"));
fileInput.sendKeys("C:/path/to/file.jpg");
The idea is to directly send the absolute path to the file to an element which you would usually click at to get the modal window - that is <input type='file' /> element.
Thanks Alex,
Java Robot API helped me for uploading file. I was fedup with File Upload using WebDriver. Following is the code I used (Small modification to yours):
Robot robot = new Robot();
robot.delay(1000);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.delay(1000);
Thanks Alex! I needed this since I could not get the sendKeys function to work when used via Play framework 2.1 (fluentlenium wrapper). I am testing over Firefox [17.0.7] for Mac and had to make a few mods to get it working. Below is an approximation of the final snippet I used.
val file = new File(PATH_TO_IPA)
val stringSelection: StringSelection = new StringSelection(file.getAbsolutePath)
Toolkit.getDefaultToolkit.getSystemClipboard().setContents(stringSelection, null)
val robot: Robot = new Robot()
// Cmd + Tab is needed since it launches a Java app and the browser looses focus
robot.keyPress(KeyEvent.VK_META)
robot.keyPress(KeyEvent.VK_TAB)
robot.keyRelease(KeyEvent.VK_META)
robot.keyRelease(KeyEvent.VK_TAB)
robot.delay(500)
robot.keyPress(KeyEvent.VK_META)
robot.keyPress(KeyEvent.VK_SHIFT)
robot.keyPress(KeyEvent.VK_G)
robot.keyRelease(KeyEvent.VK_META)
robot.keyRelease(KeyEvent.VK_SHIFT)
robot.keyRelease(KeyEvent.VK_G)
robot.keyPress(KeyEvent.VK_META)
robot.keyPress(KeyEvent.VK_V)
robot.keyRelease(KeyEvent.VK_META)
robot.keyRelease(KeyEvent.VK_V)
robot.keyPress(KeyEvent.VK_ENTER)
robot.keyRelease(KeyEvent.VK_ENTER)
robot.delay(500)
robot.keyPress(KeyEvent.VK_ENTER)
robot.keyRelease(KeyEvent.VK_ENTER)
The switching of application on Mac is much better to do with AppleScript. AppleScript is integrated to system, so it will be always functional and does not depend on order of apps on Cmd+Tab. Your test/app will be less fragile.
https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html
You need only detect you are on mac and has name of the application.
Runtime runtime = Runtime.getRuntime();
String[] args = { "osascript", "-e", "tell app \"Chrome\" to activate" };
Process process = runtime.exec(args);

Categories