Taper la touche Entrée / Retour en utilisant Python et Selenium?

260

Je cherche un moyen rapide de taper et de saisir ou de retourner la clé dans le sélénium. Malheureusement, le formulaire que j'essaie de tester (pas mon propre code, donc je ne peux pas le modifier) ​​n'a pas de bouton Soumettre. Lorsque je l'utilise manuellement, je tape simplement ENTERou RETURN. J'ai besoin de savoir comment faire cela avec la typecommande Selenium car il n'y a pas de bouton sur lequel cliquer.

croixhaug
la source
2
Cela pourrait aider asynchrony.blogspot.com/2008/11/…
Jonathan Parker
merci, c'était exactement ce dont j'avais besoin!
croixhaug
@croixhaug: Qu'utilisez-vous? Sélénium RC ou WebDriver (Sélénium 2)? Et la langue? Java? C #? ou quoi?
Ripon Al Wasim
@RiponAlWasim, en 2009 (lorsque la question a été posée), il n'y avait pas de WebDriver. Aussi les réponses pour les deux sont là depuis un certain temps ...
Alex Okrushko
@AlexOkrushko: oui, vous avez raison
Ripon Al Wasim

Réponses:

296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

l' importinstruction est pour Java, pour d'autres langages c'est peut-être un différent, par exemple python:from selenium.webdriver.common.keys import Keys

Ralph
la source
25
Je crois que c'est déplacé. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
James Broadhead
@HJames Broadhead: Je l'ai vérifié, la classe Keys pour le JAVA actuel (2.17.0) est toujoursorg.openqa.selenium.Keys
Ralph
3
Je sais que le retour est différent de l'entrée, mais en quoi Keys.ENTER est-il différent? (Je pense que Keys.RETURN rendrait simplement plus évident que c'est un bot qui fait l'action?)
NoBrainer
1
@NoBrainer: Coup d' oeil rapide au fichier importé va répondre à votre question: RETURN = '\ue006' ENTER = '\ue007'. Mais pourquoi? Quelques différences reliques ou OS.
omikron
2
@NoBrainer: Entrée et Retour sont des clés différentes, jetez un œil à l'image de cet article wikipedia: en.wikipedia.org/wiki/Enter_key
Ralph
193

JAVA

driver.findElement(By.id("Value")).sendKeys(Keys.RETURN);

OU,

driver.findElement(By.id("Value")).sendKeys(Keys.ENTER);

PYTHON

from selenium.webdriver.common.keys import Keys
driver.find_element_by_name("Value").send_keys(Keys.RETURN)

OU,

driver.find_element_by_name("Value").send_keys(Keys.ENTER)

OU,

element = driver.find_element_by_id("Value")
element.send_keys("keysToSend")
element.submit()

RUBIS

element = @driver.find_element(:name, "value")
element.send_keys "keysToSend"
element.submit

OU,

element = @driver.find_element(:name, "value")
element.send_keys "keysToSend"
element.send_keys:return

OU,

@driver.action.send_keys(:enter).perform
@driver.action.send_keys(:return).perform

C #

driver.FindElement(By.Id("Value")).SendKeys(Keys.Return);

OU,

driver.FindElement(By.Id("Value")).SendKeys(Keys.Enter);
Prashanth Sams
la source
1
Pour Python, j'ai trouvé que l'ajout de "\ n" à la chaîne d'entrée est la façon la plus simple d'aller. Cela a fonctionné dans un champ de recherche.
YakovK
26

Maintenant que Selenium 2 est sorti, il est un peu plus facile d'envoyer une clé Entrée, car vous pouvez le faire avec la send_keysméthode de la selenium.webdriver.remote.webelement.WebElementclasse (cet exemple de code est en Python, mais la même méthode existe en Java):

>>> from selenium import webdriver
>>> wd = webdriver.Firefox()
>>> wd.get("http://localhost/example/page")
>>> textbox = wd.find_element_by_css_selector("input")
>>> textbox.send_keys("Hello World\n")
Eli Courtwright
la source
24

Vous pouvez utiliser soit Keys.ENTERou Keys.RETURN. Voici quelques détails:

Utilisation:

  • Java :

    • En utilisant Keys.ENTER:

      import org.openqa.selenium.Keys;
      driver.findElement(By.id("element_id")).sendKeys(Keys.ENTER);
      
    • En utilisant Keys.RETURN

      import org.openqa.selenium.Keys;
      driver.findElement(By.id("element_id")).sendKeys(Keys.RETURN);
      
  • Python:

    • En utilisant Keys.ENTER:

      from selenium.webdriver.common.keys import Keys
      driver.find_element_by_id("element_id").send_keys(Keys.ENTER)
      
    • En utilisant Keys.RETURN

      from selenium.webdriver.common.keys import Keys
      driver.find_element_by_id("element_id").send_keys(Keys.RETURN)
      

Keys.ENTERet les Keys.RETURNdeux sont de org.openqa.selenium.Keys, qui étend java.lang.Enum<Keys>et implémentejava.lang.CharSequence


Enum Keys

Enum Keys est la représentation des touches pressables qui ne sont pas du texte. Ceux-ci sont stockés dans les points de code Unicode PUA ( Private Use Area ), 0xE000-0xF8FF.

Codes clés:

Les spéciaux keys codespour eux sont les suivants:

  • RETOUR =u'\ue006'
  • ENTER =u'\ue007'

La mise en œuvre de tous les Enum Keysest gérée de la même manière.

Par conséquent, ce n'est pas Functional ou une Operationaldifférence lorsque vous travaillez avec sendKeys(Keys.ENTER);ou WebElement.sendKeys(Keys.RETURN);via le sélénium .


Entrer la clé et la clé de retour

Sur les claviers d'ordinateur, Enter(ou Returnsur Mac OSX) dans la plupart des cas, une ligne de commande, un formulaire de fenêtre ou une boîte de dialogue fait fonctionner sa fonction par défaut. Il s'agit généralement de terminer une "entrée" et de commencer le processus souhaité, et est généralement une alternative à la pression d'un bouton OK.

Le Returnest souvent aussi appelé le Enteret ils remplissent généralement des fonctions identiques; cependant, dans certaines applications particulières (principalement la mise en page), elle Returnfonctionne spécifiquement comme la touche Retour chariot d'où elle provient. En revanche, le Enterest généralement étiqueté avec son nom en texte brut sur les claviers PC génériques.


Références

DebanjanB
la source
12

Lors de l'écriture de tests HTML, la touche ENTRÉE est disponible en tant que ${KEY_ENTER}.

Vous pouvez l'utiliser avec sendKeys, voici un exemple:

sendKeys | id=search | ${KEY_ENTER}
Maurice Svay
la source
11

En Python

Étape 1. from selenium.webdriver.common.keys import Keys

Étape 2. driver.find_element_by_name("").send_keys(Keys.ENTER)

Remarque: vous devez écrireKeys.ENTER

jayesh
la source
9

Vous faites juste ceci:

final private WebElement input = driver.findElement(By.id("myId"));
input.clear();
input.sendKeys(value); // the value we want to set to input
input.sendKeys(Keys.RETURN);
hoang nguyen
la source
juste par curiosité, pourquoi préférez-vous écrire 3 lignes de code que vous pouvez écrire en une seule ligne
Shekhar Swami
9
selenium.keyPress("css=input.tagit-input.ui-autocomplete-input", "13");
Nirmal Patel
la source
6

Pour les personnes qui utilisent WebDriverJS Keys.RETURNseraient référencées comme

webdriver.Key.RETURN

Un exemple plus complet comme référence pourrait également être utile:

var pressEnterToSend = function () {
    var deferred = webdriver.promise.defer();
    webdriver.findElement(webdriver.By.id('id-of-input-element')).then(function (element) {
        element.sendKeys(webdriver.Key.RETURN);
        deferred.resolve();
    });

    return deferred.promise;
};
Greg Stewart
la source
6

driver.findElement(By.id("Value")).sendKeys(Keys.RETURN); ou driver.findElement(By.id("Value")).sendKeys(Keys.ENTER);

Mosam Mehta
la source
6
search = browser.find_element_by_xpath("//*[@type='text']")
search.send_keys(u'\ue007')

ENTER = u '\ ue007'

reportez-vous à la documentation sur le sélénium «Clés spéciales»

Ashish gupta
la source
Cette réponse a fonctionné, mais l'a accidentellement rejetée parce que j'ai utilisé le mauvais numéro.
Martin Kersten
5

J'aime juste noter que j'avais besoin de cela pour mes tests de concombre et j'ai découvert que si vous aimez simuler en appuyant sur la touche entrée / retour, vous devez envoyer la :returnvaleur et non la :entervaleur (voir les valeurs décrites ici )

Pascal Lindelauf
la source
Cela est également vrai pour un champ de texte d'entrée GWT.
joescii
5

Pour Selenium RC avec Java:

selenium.keyPress("elementID", "\13");

Pour Selenium WebDriver (alias Selenium2) avec java:

driver.findElement(By.id("elementID")).sendKeys(Keys.ENTER);

OU,

driver.findElement(By.id("elementID")).sendKeys(Keys.RETURN);

Une autre façon d'appuyer sur Entrée dans WebDriver à l'aide de la classe Actions:

Actions action = new Actions(driver); 
action.sendKeys(driver.findElement(By.id("elementID")), Keys.ENTER).build().perform();
Ripon Al Wasim
la source
3

si vous cherchez "comment appuyer sur la touche entrée du clavier dans le sélecteur web sélénium (java)", le code ci-dessous vous aidera certainement.

//assign key board object
Keyboard keyboard=((HasInputDevices) driver).getKeyboard();
//enter a key
keyboard.pressKey(Keys.ENTER);
Plaban Dwivedy
la source
1
Pourriez-vous élaborer davantage votre réponse en ajoutant un peu plus de description sur la solution que vous proposez?
abarisone
3

Vous pouvez faire appel submit()à l'objet élément dans lequel vous avez entré votre texte.

Alternativement, vous pouvez spécifiquement lui envoyer la clé d'entrée comme indiqué dans cet extrait de code python:

from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.ENTER) # element is the WebElement object corresponding to the input field on the page
entropie
la source
2

Essayez d'utiliser XPATH pour rechercher l'élément, puis le code suivant fonctionne:

driver.findElement(By.xpath(".//*[@id='txtFilterContentUnit']")).sendKeys(Keys.ENTER);
Abhijeet
la source
Si l'élément a un ID, il est préférable d'utiliser l'ID au lieu de xpath
Ripon Al Wasim
2

Il existe différentes façons d'appuyer sur les touches - C #:

Driver.FindElement(By.Id("Value")).SendKeys(Keys.Return);

OU

OpenQA.Selenium.Interactions.Actions action = new OpenQA.Selenium.Interactions.Actions(Driver);
action.SendKeys(OpenQA.Selenium.Keys.Escape);

OU

IWebElement body = GlobalDriver.FindElement(By.TagName("body"));
body.SendKeys(Keys.Escape);
Mohsin Awan
la source
2
object.sendKeys("your message",Keys.ENTER);

Ça marche

Sanju Abel
la source
2

Lorsque vous ne voulez rechercher aucun localisateur, vous pouvez utiliser la classe Robot: par exemple:

            Robot robot = new Robot();
            robot.keyPress(KeyEvent.VK_ENTER);
            robot.keyRelease(KeyEvent.VK_ENTER);
Krzysztof Walczewski
la source
2

Pour saisir des clés à l'aide de sélénium, vous devez d'abord importer la bibliothèque suivante:

"import org.openqa.selenium.Keys"

puis ajoutez ce code là où vous voulez entrer la clé

"WebElement.sendKeys(Keys.RETURN);"

Vous pouvez remplacer RETOUR par n'importe quelle clé de la liste selon vos besoins

RNS
la source
1

Peut également être réalisé à l'aide de l'interface Action, dans le cas de WebDriver -

WebElement username = driver.findElement(By.name("q"));
username.sendKeys(searchKey);
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);
action.perform();
anujin
la source
1

Pour RUBY: -

driver.find_element(:id,"XYZ").send_keys:return
SoftwareTestingEnthusiast
la source
1

Tu peux essayer :

selenium.keyPress("id="","\\13");
dexter
la source
1

J'ai dû envoyer la touche Entrée au milieu d'un texte. J'ai donc passé le texte suivant pour envoyer la fonction touches pour atteindre1\n2\n3

1\N{U+E007}2\N{U+E007}3
Anand
la source
1

Pour Selenium WebDriver utilisant xpath (si la clé est visible):

driver.findElement(By.xpath("xpath of text field")).sendKeys(Keys.ENTER);

ou,

driver.findElement(By.xpath("xpath of text field")).sendKeys(Keys.RETURN);
Kumrun Nahar Keya
la source
1

Si vous êtes dans cette situation spécifique:

a) je veux JUSTE appuyer sur la touche, mais je n'ai pas d'élément web spécifique sur lequel cliquer

b) vous utilisez Selenium 2 (webDriver)

Alors la solution est:

    Actions builder = new Actions(webDriverInstance);
    builder.sendKeys(Keys.RETURN).perform();
Ivo Mitev
la source
1

JAVA / JavaScript:

Vous pourriez probablement le faire de cette manière également, de manière non native :

public void triggerButtonOnEnterKeyInTextField(String textFieldId, String clickableButId)
{
  ((JavascriptExecutor) driver).executeScript("
  elementId = arguments[0];
  buttonId = arguments[1];
  document.getElementById(elementId)
    .addEventListener("keyup", function(event) {
      event.preventDefault();
      if (event.keyCode == 13) {
          document.getElementById(buttonId).click();
      }
    });", textFieldId, clickableButId);
}
djangofan
la source
1
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);
Jack 666
la source
0

Pour tout le monde utilisant javascript / node , cela a fonctionné pour moi:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Réintégrer Monica
la source