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.



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


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);

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")

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


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}

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


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);

juste par curiosité, pourquoi préférez-vous écrire 3 lignes de code que vous pouvez écrire en une seule ligne
Shekhar Swami


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;
};

6

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


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»


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 )


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();

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);

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

2

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

driver.findElement(By.xpath(".//*[@id='txtFilterContentUnit']")).sendKeys(Keys.ENTER);

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);


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);

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


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();


1

Tu peux essayer :

selenium.keyPress("id="","\\13");

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

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);

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();

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);
}

1
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);

0

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

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.