¿Escribiendo la tecla Enter / Return usando Python y Selenium?

272

Estoy buscando una forma rápida de escribir y la tecla Intro o Retorno en Selenium. Desafortunadamente, el formulario que estoy tratando de probar (no es mi propio código, así que no puedo modificarlo) no tiene un botón Enviar. Cuando trabajo con él manualmente, simplemente escribo ENTERo RETURN. Necesito saber cómo hacer eso con el typecomando Selenium ya que no hay ningún botón para hacer clic.

croixhaug
fuente
2
Esto podría ayudar a asynchrony.blogspot.com/2008/11/…
Jonathan Parker
gracias, eso era exactamente lo que necesitaba!
croixhaug
@croixhaug: ¿Qué estás usando? Selenium RC o WebDriver (Selenium 2)? ¿Y el idioma? ¿Java? C#? ¿o que?
Ripon Al Wasim
@RiponAlWasim, en 2009 (cuando se hizo la pregunta) no había WebDriver. También las respuestas para ambos han estado aquí por un tiempo ...
Alex Okrushko
@AlexOkrushko: sí, tienes razón
Ripon Al Wasim

Respuestas:

308
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

la importdeclaración es para Java, para otros lenguajes tal vez sea diferente, por ejemplo, python:from selenium.webdriver.common.keys import Keys

Ralph
fuente
26
Creo que se mueve. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
James Broadhead
@HJames Broadhead: Lo he comprobado, la clase de claves para el JAVA real (2.17.0) todavía estáorg.openqa.selenium.Keys
Ralph
3
Sé que regresar es diferente a ingresar, pero ¿en qué se diferencia Keys.ENTER? (¿Creo que Keys.RETURN simplemente haría más obvio que es un bot haciendo la acción?)
NoBrainer
1
@NoBrainer: vistazo rápido a archivos importados a responder a su pregunta: RETURN = '\ue006' ENTER = '\ue007'. ¿Pero por qué? Algunas reliquias o diferencias del sistema operativo.
omikron
2
@NoBrainer: Enter y Return son claves diferentes, eche un vistazo a la imagen de este artículo de wikipedia: en.wikipedia.org/wiki/Enter_key
Ralph
198

JAVA

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

O,

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

PITÓN

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

O,

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

O,

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

RUBÍ

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

O,

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

O,

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

C#

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

O,

driver.FindElement(By.Id("Value")).SendKeys(Keys.Enter);
Prashanth Sams
fuente
1
Para Python, descubrí que agregar "\ n" a la cadena de entrada es la forma más sencilla de hacerlo. Funcionó en un campo de búsqueda.
YakovK
26

Ahora que se lanzó Selenium 2, es un poco más fácil enviar una tecla Enter, ya que puede hacerlo con el send_keysmétodo de la selenium.webdriver.remote.webelement.WebElementclase (este código de ejemplo está en Python, pero el mismo método 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
fuente
26

Puede utilizar Keys.ENTERo Keys.RETURN. A continuación se muestran algunos detalles:

Uso:

  • Java :

    • Usando Keys.ENTER:

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

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

    • Usando Keys.ENTER:

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

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

Keys.ENTERy Keys.RETURNambos son de org.openqa.selenium.Keys, que se extiende java.lang.Enum<Keys>e implementajava.lang.CharSequence


Claves de enumeración

Enum Keys son las representaciones de teclas pulsables que no son texto. Estos se almacenan en los puntos de código Unicode PUA ( Área de uso privado ), 0xE000-0xF8FF.

Códigos clave:

Los especiales keys codespara ellos son los siguientes:

  • VUELTA =u'\ue006'
  • ENTRAR =u'\ue007'

La implementación de todos Enum Keysse maneja de la misma manera.

Por lo tanto, estos son No Functional o Operationaldiferencia al trabajar con sendKeys(Keys.ENTER);o WebElement.sendKeys(Keys.RETURN);mediante Selenium .


Introduzca la clave y la clave de retorno

En los teclados de computadora, Enter(o Returnen Mac OSX) en la mayoría de los casos hace que una línea de comando, ventana o cuadro de diálogo opere con su función predeterminada. Por lo general, esto es para finalizar una "entrada" y comenzar el proceso deseado, y generalmente es una alternativa a presionar un botón Aceptar.

A Returnmenudo también se les conoce como Entery normalmente realizan funciones idénticas; sin embargo, en algunas aplicaciones particulares (principalmente el diseño de página) Returnfunciona específicamente como la tecla Retorno de carro de la que se origina. Por el contrario, Entercomúnmente se etiqueta con su nombre en texto sin formato en teclados de PC genéricos.


Referencias

DebanjanB
fuente
14

En Python

Paso 1. from selenium.webdriver.common.keys import Keys

Paso 2. driver.find_element_by_name("").send_keys(Keys.ENTER)

Nota: tienes que escribirKeys.ENTER

Jayesh
fuente
12

Al escribir pruebas HTML, la tecla ENTER está disponible como ${KEY_ENTER}.

Puede usarlo con sendKeys, aquí hay un ejemplo:

sendKeys | id=search | ${KEY_ENTER}
Maurice Svay
fuente
9

Solo haz esto:

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
fuente
solo por curiosidad, ¿por qué prefiere escribir 3 líneas de código que puede escribir en una sola línea?
Shekhar Swami
9
selenium.keyPress("css=input.tagit-input.ui-autocomplete-input", "13");
Nirmal Patel
fuente
6

Para aquellas personas que usan WebDriverJS Keys.RETURN, se haría referencia a

webdriver.Key.RETURN

Un ejemplo más completo como referencia también podría ser útil:

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
fuente
6

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

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

ENTRAR = u '\ ue007'

consulte la documentación de selenio 'Teclas especiales'

Ashish gupta
fuente
Esta respuesta funciona, pero accidentalmente la rechacé porque usé el número incorrecto.
Martin Kersten
5

Solo me gusta señalar que necesitaba esto para mis pruebas de pepino y descubrí que si desea simular presionando la tecla enter / return, debe enviar el :returnvalor y no el :entervalor (vea los valores descritos aquí )

Pascal Lindelauf
fuente
Esto también es cierto para un campo de texto de entrada GWT.
joescii
5

Para Selenium RC con Java:

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

Para Selenium WebDriver (también conocido como Selenium2) con java:

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

O,

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

Otra forma de presionar Enter en WebDriver usando la clase Actions:

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

Si está buscando "cómo presionar la tecla Intro desde el teclado en selenium webdriver (java)", el siguiente código definitivamente lo ayudará.

//assign key board object
Keyboard keyboard=((HasInputDevices) driver).getKeyboard();
//enter a key
keyboard.pressKey(Keys.ENTER);
Plaban Dwivedy
fuente
1
¿Podría elaborar más su respuesta agregando un poco más de descripción sobre la solución que proporciona?
abarisone
3

Puedes llamar submit() al objeto de elemento en el que ingresó su texto.

Alternativamente, puede enviarle específicamente la tecla Intro como se muestra en este fragmento de 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
entropía
fuente
2

Intente usar XPATH para buscar el elemento y luego, el siguiente código funciona:

driver.findElement(By.xpath(".//*[@id='txtFilterContentUnit']")).sendKeys(Keys.ENTER);
Abhijeet
fuente
Si el elemento tiene ID, es mejor usar ID en lugar de xpath
Ripon Al Wasim
2

Hay las siguientes formas de presionar teclas: C #:

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

O

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

O

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

funciona

Sanju Abel
fuente
2

Cuando no desee buscar ningún localizador, puede usar la clase Robot: por ejemplo:

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

Para ingresar claves usando selenio, primero debe importar la siguiente biblioteca:

"import org.openqa.selenium.Keys"

luego agregue este código donde desea ingresar la clave

"WebElement.sendKeys(Keys.RETURN);"

Puede reemplazar RETORNO con cualquier clave de la lista de acuerdo con sus requisitos

RNS
fuente
1

También se podría lograr utilizando la interfaz de acción, en el caso de WebDriver:

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

Para RUBY: -

driver.find_element(:id,"XYZ").send_keys:return
SoftwareTestingEntusiasta
fuente
1

Puedes probar :

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

Tuve que enviar la tecla Enter en medio de un mensaje de texto. Así que pasé el siguiente texto para enviar la función de teclas para lograr1\n2\n3

1\N{U+E007}2\N{U+E007}3
Anand
fuente
1

Para Selenium WebDriver usando xpath (si la clave está visible):

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

o,

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

Si se encuentra en esta situación específica:

a) desea SÓLO presionar la tecla, pero no tiene un elemento web específico para hacer clic

b) está utilizando Selenium 2 (webDriver)

Entonces la solución es:

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

JAVA / JavaScript:

Probablemente también podría hacerlo de esta manera, de forma no nativa :

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
fuente
1
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);
Gato 666
fuente
0

Para todos los que usan javascript / node , esto funcionó para mí:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Elrond apoya a Monica
fuente