¿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.



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


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

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

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


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


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}

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

solo por curiosidad, ¿por qué prefiere escribir 3 líneas de código que puede escribir en una sola línea?
Shekhar Swami


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

6

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


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'


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


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

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

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

2

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

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

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


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

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


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



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

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

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

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

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

0

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

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.