2012-12-18

How to press Keyboard in selenium webdriver?

In this article we are going to see the functions for keyboard's keypass key events. I am using c# in vs2010.
Before starting , please follow my previous posts for initial setup.

To find an element we use
driver.FindElement(By.XPath("String"));
if we add send keys as keyboard command, then we can use keyboard event with the element that we found. like
driver.FindElement(By.XPath("String")).SendKeys(Keys.ArrowRight);
Here, "string" is the Xpath loaction. And on the element that we have found, keyboard's Arrow left will be pressed.

Like that following keys can be pressed
-For the number pad addition key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Add);
-For  the Alt key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Alt);
-For  the Left arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.ArrowDown);
-For  the left arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.ArrowLeft);
-For  the right arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.ArrowRight);
-For  the up arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.ArrowUp);
-For  the Backspace key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Backspace);
-For  the Cancel keystroke.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Cancel);
-For  the Clear keystroke.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Clear);
-For  the function key COMMAND.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Command);
-For  the Control key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Control);
-For  the number pad decimal separator key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Decimal);
-For  the Delete key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Delete);
-For  the number pad division key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Divide);
-For  the Left arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Down);
-For  the End key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.End);
-For  the Enter key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Enter);
-For  the equal sign key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Equal);
-For  the Escape key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Escape);
-For  the function key F1.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F1);
-For  the function key F10.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F10);
-For  the function key F11.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F11);
-For  the function key F12.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F12);
-For  the function key F2.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F2);
-For  the function key F3.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F3);
-For  the function key F4.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F4);
-For  the function key F5.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F5);
-For  the function key F6.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F6);
-For  the function key F7.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F7);
-For  the function key F8.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F8);
-For  the function key F9.
driver.FindElement(By.XPath("String")).SendKeys(Keys.F9);
-For  the Help keystroke.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Help);
-For  the Home key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Home);
-For  the Insert key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Insert);
-For  the left arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Left);
-For  the Alt key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.LeftAlt);
-For  the Control key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.LeftControl);
-For  the Shift key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.LeftShift);
-For  the function key META.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Meta);
-For  the number pad multiplication key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Multiply);
-For  the NUL keystroke.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Null);
-For  the number pad 0 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad0);
-For  the number pad 1 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad1);
-For  the number pad 2 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad2);
-For  the number pad 3 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad3);
-For  the number pad 4 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad4);
-For  the number pad 5 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad5);
-For  the number pad 6 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad6);
-For  the number pad 7 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad7);
-For  the number pad 8 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad8);
-For  the number pad 9 key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.NumberPad9);
-For  the Page Down key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.PageDown);
-For  the Page Up key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.PageUp);
-For  the Pause key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Pause);
-For  the Return key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Return);
-For  the right arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Right);
-For  the semi-colon key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Semicolon);
-For  the number pad thousands separator key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Separator);
-For  the Shift key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Shift);
-For  the Space bar key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Space);
-For  the number pad subtraction key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Subtract);
-For  the Tab key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Tab);
-For  the up arrow key.
driver.FindElement(By.XPath("String")).SendKeys(Keys.Up);

For multiple key press :
First, get the ascii code for the key. For example if we want to press Ctrl-A, it should be 0001. The full list is here (or here). First assign a character(c) to the value and then convert that as string inside send key.
char c = '\u0001'; // ASCII code 1 for Ctrl-A
driver.FindElement(By.XPath("String")).SendKeys(Convert.ToString(c));


---------------Another way works in Java---------------
Make a action instance and use action instance . Inhere, we have used 3type of method to press three different key , and as they are different from each other, it will make 3 key press together.(means in here Alt+Shift+T)
Actions kpress = new Actions(driver);
kpress.keyDown(driver.findElement(By.id("name")), Keys.ALT).perform(); kpress.sendKeys(driver.findElement(By.id("name")), "T").perform();
kpress.keyUp(driver.findElement(By.id("name")),Keys.SHIFT).perform();



...Thanks....:)...

12 comments:

  1. Replies
    1. 2 ways to do that, ether You can press ascii values with sendkeys or keypress function or you can do a small java script pressing that. For Java script, you have to have focus and then run java script.(here is key value for using java scripts http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes). In this case, you have keep the focus first, then do that.

      Delete
    2. And this can give a good way of doing that http://stackoverflow.com/questions/11503736/key-press-in-selenium-webdriver

      Delete
  2. I am trying to press enter on a aspnet devexpress page ..
    But no luck ?? I have copied and pasted the following
    PS: All am doing is entering username and password and pressing "enter"
    First two lines work but 3rd doesn't, any help would be great !
    driver.FindElement(By.Id("pcLogin_Panel1_txtUsername_I")).SendKeys("auto test1"); driver.FindElement(By.Id("pcLogin_Panel1_txtPassword_I")).SendKeys("Exchange1");
    driver.FindElement(By.XPath("String")).SendKeys(Keys.Enter);

    ReplyDelete
  3. well, that worked for me very well . can you show me debugging errors?.. I think you locator can not locate the log in button properly. Send me the page, I might help you getting the Xpath String....
    BTW...I use "String" as no value, you have to add xpath value as string here..

    ReplyDelete
  4. This comment has been removed by the author.

    ReplyDelete
  5. How to press F6 in selenium webdriver using C#? I don't want to use any element to press it. Just press F6 on a browser

    ReplyDelete
    Replies
    1. use predefine enums . https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/Keys.html

      Delete
  6. Hi..
    Can you tell me script... how to disable input Mouse and Keyboard actions while running the selenium script.

    ReplyDelete
    Replies
    1. you have disable attribute. For example , a text box id "myText"

      document.getElementById("myText").disabled = true;

      and to disable all mouse click

      var event = $(document).click(function(e) {
      e.stopPropagation();
      e.preventDefault();
      e.stopImmediatePropagation();
      return false;
      });

      // disable right click
      $(document).bind('contextmenu', function(e) {
      e.stopPropagation();
      e.preventDefault();
      e.stopImmediatePropagation();
      return false;
      });

      Delete
  7. How can I put random number one after another in text box using Keyboard?

    My Situation: Numeric unique field, can't paste prepared random number (e.g.: 7664784). So if I generate random number suppose '765431', I have to put it one by one, not altogether. And that filed validates unique key during runtime value entering.

    ReplyDelete
    Replies
    1. in that case, you need to convert into character sequence , put each character at a time using a loop and probably a expected delay (500-1000ms) as if it were pressed by real users.

      Delete