Digitando il tasto Invio / Invio usando Python e Selenium?


260

Sto cercando un modo rapido per digitare e il tasto Invio o Invio in Selenio. Purtroppo il modulo che sto provando a testare (non il mio codice quindi non posso modificarlo) non ha un pulsante Invia. Quando lavoro con esso manualmente, scrivo semplicemente ENTERo RETURN. Devo sapere come farlo con il typecomando Selenium in quanto non è presente alcun pulsante per fare clic.



grazie, era esattamente quello di cui avevo bisogno!
croixhaug,

@croixhaug: che cosa stai usando? Selenium RC o WebDriver (Selenium 2)? E la lingua? Giava? C #? o cosa?
Ripon Al Wasim,

@RiponAlWasim, nel 2009 (quando è stata posta la domanda) non c'erano WebDriver. Anche le risposte per entrambi sono qui da un po '...
Alex Okrushko,

@AlexOkrushko: sì, hai ragione
Ripon Al Wasim,

Risposte:


296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

l' importaffermazione è per Java, per altre lingue è forse diversa, ad esempio python:from selenium.webdriver.common.keys import Keys


25
Credo che sia commosso. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
James Broadhead,

@HJames Broadhead: l'ho verificato, la classe Keys per l'attuale JAVA (2.17.0) è ancoraorg.openqa.selenium.Keys
Ralph

3
So che return è diverso da enter, ma in cosa Keys.ENTER è diverso? (Penserei che Keys.RETURN renderebbe semplicemente più ovvio che si tratta di un bot che fa l'azione?)
NoBrainer

1
@NoBrainer: rapido sguardo a file importato sarà rispondere alla tua domanda: RETURN = '\ue006' ENTER = '\ue007'. Ma perché? Alcune differenze di reliquie o OS.
omikron,

2
@NoBrainer: Enter e Return sono chiavi diverse, dai un'occhiata all'immagine di questo articolo di Wikipedia: en.wikipedia.org/wiki/Enter_key
Ralph,

193

GIAVA

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

O,

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

PITONE

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

RUBINO

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
Per Python, ho scoperto che aggiungere "\ n" alla stringa di input è il modo più semplice di procedere. Ha funzionato in un campo di ricerca.
YakovK,

26

Ora che Selenium 2 è stato rilasciato, è un po 'più facile inviare una chiave Invio, poiché puoi farlo con il send_keysmetodo della selenium.webdriver.remote.webelement.WebElementclasse (questo codice di esempio è in Python, ma lo stesso metodo esiste in 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

Puoi usare uno di Keys.ENTERo Keys.RETURN. Ecco alcuni dettagli:

Utilizzo:

  • Java :

    • Utilizzando Keys.ENTER:

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

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

    • Utilizzando Keys.ENTER:

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

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

Keys.ENTERed Keys.RETURNentrambi provengono da org.openqa.selenium.Keys, che si estende java.lang.Enum<Keys>e implementajava.lang.CharSequence


Enum Keys

Enum Keys è la rappresentazione di tasti premibili che non sono testo. Questi sono memorizzati nei punti di codice Unicode PUA ( Private Use Area ), 0xE000-0xF8FF.

Codici chiave:

Lo speciale keys codesper loro sono i seguenti:

  • RITORNO =u'\ue006'
  • INVIO =u'\ue007'

L'implementazione di tutto ciò Enum Keysè gestita allo stesso modo.

Quindi questi sono No Functional o Operationaldifferenze mentre si lavora con uno sendKeys(Keys.ENTER);o WebElement.sendKeys(Keys.RETURN);attraverso il selenio .


Tasto Invio e tasto Invio

Sulle tastiere del computer, il Enter(o il Returnsu Mac OSX) nella maggior parte dei casi fa sì che una riga di comando, un modulo finestra o una finestra di dialogo eseguano la sua funzione predefinita. Questo in genere serve per terminare una "voce" e iniziare il processo desiderato, e di solito è un'alternativa alla pressione di un pulsante OK.

Il Returnè spesso indicato anche come Entere di solito svolgono funzioni identiche; tuttavia in alcune applicazioni particolari (principalmente layout di pagina) Returnfunziona in modo specifico come il tasto Ritorno a capo da cui proviene. Al contrario, Enterè comunemente etichettato con il suo nome in testo normale su tastiere generiche per PC.


Riferimenti


12

Quando si scrivono test HTML, la chiave INVIO è disponibile come ${KEY_ENTER}.

Puoi usarlo con sendKeys, ecco un esempio:

sendKeys | id=search | ${KEY_ENTER}

11

In Python

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

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

Nota: devi scrivereKeys.ENTER


9

Basta fare questo:

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 per curiosità, perché preferisci scrivere 3 righe di codice che puoi scrivere in una sola riga
Shekhar Swami

9
selenium.keyPress("css=input.tagit-input.ui-autocomplete-input", "13");

6

Per coloro che usano WebDriverJS Keys.RETURNverrebbe indicato come

webdriver.Key.RETURN

Un esempio più completo come riferimento potrebbe anche essere 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); o 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'

consultare la documentazione del selenio "Tasti speciali"


Questa risposta ha funzionato ma l'ha accidentalmente votata perché ho usato il numero sbagliato.
Martin Kersten,

5

Mi piace solo notare che ne avevo bisogno per i miei test Cucumber e ho scoperto che se ti piace simulare premendo il tasto invio / ritorno, devi inviare il :returnvalore e non il :entervalore (vedi i valori descritti qui )


Questo vale anche per un campo di testo di input GWT.
joescii,

5

Per Selenium RC con Java:

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

Per Selenium WebDriver (aka Selenium2) con java:

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

O,

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

Un altro modo per premere Invio in WebDriver utilizzando la classe Actions:

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

3

se stai cercando "come premere il tasto Invio dalla tastiera in selenium webdriver (java)", allora il codice qui sotto ti aiuterà sicuramente.

//assign key board object
Keyboard keyboard=((HasInputDevices) driver).getKeyboard();
//enter a key
keyboard.pressKey(Keys.ENTER);

1
Potresti per favore elaborare di più la tua risposta aggiungendo un po 'più di descrizione della soluzione che offri?
abarisone,

3

Puoi chiamare submit()l'oggetto element in cui hai inserito il testo.

In alternativa, puoi specificatamente inviarti la chiave di invio come mostrato in questo frammento di pitone:

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

Prova a utilizzare XPATH per la ricerca dell'elemento e quindi il seguente codice funziona:

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

Se l'elemento ha ID, è meglio usare ID invece di xpath
Ripon Al Wasim

2

Esistono i seguenti modi per premere i tasti - 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

Quando non si desidera cercare alcun localizzatore, è possibile utilizzare la classe Robot: ad esempio:

            Robot robot = new Robot();
            robot.keyPress(KeyEvent.VK_ENTER);
            robot.keyRelease(KeyEvent.VK_ENTER);

2

Per inserire le chiavi usando il selenio Per prima cosa devi importare la seguente libreria:

"import org.openqa.selenium.Keys"

quindi aggiungi questo codice nel punto in cui desideri inserire la chiave

"WebElement.sendKeys(Keys.RETURN);"

È possibile sostituire INVIO con qualsiasi tasto dall'elenco in base alle proprie esigenze


1

Potrebbe essere realizzato anche utilizzando l'interfaccia di azione, nel caso di WebDriver -

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


1

Puoi provare :

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

1

Ho dovuto inviare la chiave di invio nel mezzo di un testo. Così ho passato il seguente testo per inviare i tasti funzione per raggiungere1\n2\n3

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

1

Per Selenium WebDriver utilizzando xpath (se la chiave è visibile):

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

o,

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

1

Se ti trovi in ​​questa situazione specifica:

a) SOLO premere il tasto, ma non avere un webElement specifico su cui fare clic

b) stai usando Selenium 2 (webDriver)

Quindi la soluzione è:

    Actions builder = new Actions(webDriverInstance);
    builder.sendKeys(Keys.RETURN).perform();

1

JAVA / JavaScript:

Probabilmente potresti farlo anche in modo non nativo :

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

Per tutti quelli che usano javascript / node , questo ha funzionato per me:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.