Eingabe- / Eingabetaste mit Python und Selen eingeben?


260

Ich suche nach einer schnellen Möglichkeit, in Selenium eine Eingabetaste einzugeben. Leider hat das Formular, das ich testen möchte (nicht mein eigener Code, daher kann ich es nicht ändern), keine Schaltfläche zum Senden. Wenn ich manuell damit arbeite, tippe ich einfach ENTERoder RETURN. Ich muss wissen, wie man das mit dem Selenium- typeBefehl macht, da es keine Schaltfläche zum Klicken gibt.



danke, das war genau das was ich brauchte!
Croixhaug

@ Croixhaug: Was benutzt du? Selenium RC oder WebDriver (Selenium 2)? Was ist mit Sprache? Java? C #? oder was?
Ripon Al Wasim

@RiponAlWasim, im Jahr 2009 (als die Frage gestellt wurde) gab es keinen WebDriver. Auch die Antworten für beide sind schon eine Weile hier ...
Alex Okrushko

@ AlexOkrushko: Ja, Sie haben Recht
Ripon Al Wasim

Antworten:


296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

Die importAussage ist für Java, für andere Sprachen ist es vielleicht eine andere, zum Beispiel Python:from selenium.webdriver.common.keys import Keys


25
Ich glaube, dass es bewegt ist. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
James Broadhead

@ HJames Broadhead: Ich habe es überprüft, die Keys-Klasse für die aktuelle JAVA (2.17.0) ist nochorg.openqa.selenium.Keys
Ralph

3
Ich weiß, dass return anders ist als enter, aber wie unterscheidet sich Keys.ENTER? (Ich würde denken, dass Keys.RETURN einfach klarer machen würde, dass es ein Bot ist, der die Aktion
ausführt

1
@NoBrainer: Ein kurzer Blick auf die importierte Datei beantwortet Ihre Frage : RETURN = '\ue006' ENTER = '\ue007'. Aber wieso? Einige Relikt- oder Betriebssystemunterschiede.
Omikron

2
@ NoBrainer: Enter und Return sind verschiedene Schlüssel. Schauen Sie sich das Bild dieses Wikipedia-Artikels an: en.wikipedia.org/wiki/Enter_key
Ralph

193

JAVA

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

ODER,

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)

ODER,

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

ODER,

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

RUBIN

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

ODER,

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

ODER,

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

C #

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

ODER,

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

1
Für Python war das Anhängen von "\ n" an die Eingabezeichenfolge der einfachste Weg. Es funktionierte in einem Suchfeld.
YakovK

26

Nachdem Selenium 2 veröffentlicht wurde, ist es etwas einfacher, einen Enter-Schlüssel zu senden, da Sie dies mit der send_keysMethode der selenium.webdriver.remote.webelement.WebElementKlasse tun können (dieser Beispielcode ist in Python, aber dieselbe Methode existiert 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

Sie können entweder von Keys.ENTERoder verwenden Keys.RETURN. Hier sind einige Details:

Verwendung :

  • Java :

    • Verwenden von Keys.ENTER:

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

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

    • Verwenden von Keys.ENTER:

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

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

Keys.ENTERund Keys.RETURNbeide sind von org.openqa.selenium.Keys, die erweitert java.lang.Enum<Keys>und implementiertjava.lang.CharSequence


Enum Keys

Enum Keys ist die Darstellung von drückbaren Tasten, die kein Text sind. Diese werden in den Unicode PUA- Codepunkten ( Private Use Area ) 0xE000-0xF8FF gespeichert.

Schlüsselcodes:

Das Besondere keys codesfür sie sind wie folgt:

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

Die Implementierung aller Enum Keyserfolgt auf die gleiche Weise.

Daher ist dies Nein Functional oder OperationalUnterschied bei der Arbeit mit sendKeys(Keys.ENTER);oder WebElement.sendKeys(Keys.RETURN);durch Selen .


Eingabetaste und Eingabetaste

Auf Computertastaturen bewirkt das Enter(oder Returnunter Mac OSX) in den meisten Fällen, dass eine Befehlszeile, ein Fensterformular oder ein Dialogfeld ihre Standardfunktion ausführt. Dies dient normalerweise dazu, einen "Eintrag" zu beenden und den gewünschten Vorgang zu starten. Dies ist normalerweise eine Alternative zum Drücken einer OK-Taste.

Das Returnwird oft auch als das bezeichnet Enterund sie führen normalerweise identische Funktionen aus; In einigen bestimmten Anwendungen (hauptsächlich Seitenlayout) Returnfunktioniert dies jedoch speziell wie die Carriage Return- Taste, von der es stammt. Im Gegensatz dazu wird das Enterauf allgemeinen PC-Tastaturen häufig mit seinem Namen im Klartext gekennzeichnet.


Verweise


12

Beim Schreiben von HTML-Tests steht die ENTER-Taste als zur Verfügung ${KEY_ENTER}.

Sie können es mit verwenden sendKeys, hier ist ein Beispiel:

sendKeys | id=search | ${KEY_ENTER}

11

In Python

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

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

Hinweis: Sie müssen schreibenKeys.ENTER


9

Du machst einfach das:

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

Nur aus Neugier, warum bevorzugen Sie es, 3 Codezeilen zu schreiben, die Sie in einer einzigen Zeile schreiben können
Shekhar Swami


6

Für diejenigen, die WebDriverJS verwenden Keys.RETURN, wird als bezeichnet

webdriver.Key.RETURN

Ein vollständigeres Beispiel als Referenz könnte ebenfalls hilfreich sein:

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

Siehe Selendokumentation 'Spezialschlüssel'


Diese Antwort funktioniert, wurde aber versehentlich abgelehnt, weil ich die falsche Nummer verwendet habe.
Martin Kersten

5

Ich möchte nur darauf hinweisen, dass ich dies für meine Gurkentests benötigte und herausfand, dass Sie, wenn Sie das Drücken der Eingabetaste simulieren möchten, den :returnWert und nicht den :enterWert senden müssen (siehe die hier beschriebenen Werte ).


Dies gilt auch für ein GWT-Eingabetextfeld.
joescii

5

Für Selenium RC mit Java:

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

Für Selenium WebDriver (auch bekannt als Selenium2) mit Java:

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

ODER,

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

Eine andere Möglichkeit, die Eingabetaste in WebDriver mithilfe der Actions-Klasse zu drücken:

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

3

Wenn Sie nach "Drücken der Eingabetaste über die Tastatur in Selenium Webdriver (Java)" suchen, hilft Ihnen der folgende Code auf jeden Fall.

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

1
Könnten Sie bitte Ihre Antwort näher erläutern und etwas mehr Beschreibung der von Ihnen bereitgestellten Lösung hinzufügen?
Abarisone

3

Sie können submit()das Elementobjekt aufrufen, in das Sie Ihren Text eingegeben haben.

Alternativ können Sie die Eingabetaste speziell an diese senden, wie in diesem Python-Snippet gezeigt:

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

Versuchen Sie, XPATH zum Durchsuchen des Elements zu verwenden, und dann funktioniert der folgende Code:

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

Wenn das Element eine ID hat, ist es besser, eine ID anstelle von xpath zu verwenden
Ripon Al Wasim

2

Es gibt folgende Möglichkeiten, Tasten zu drücken - C #:

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

ODER

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

ODER

IWebElement body = GlobalDriver.FindElement(By.TagName("body"));
body.SendKeys(Keys.Escape);


2

Wenn Sie keinen Locator suchen möchten, können Sie die Robot-Klasse verwenden: z.

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

2

So geben Sie Schlüssel mit Selen ein Zuerst müssen Sie folgende Bibliothek importieren:

"import org.openqa.selenium.Keys"

Fügen Sie dann diesen Code hinzu, in den Sie den Schlüssel eingeben möchten

"WebElement.sendKeys(Keys.RETURN);"

Sie können RETURN entsprechend Ihren Anforderungen durch beliebige Schlüssel aus der Liste ersetzen


1

Könnte auch über die Aktionsschnittstelle im Fall von WebDriver erreicht werden -

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


1

Du kannst es versuchen :

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

1

Ich musste die Eingabetaste mitten in einem Text senden. Also habe ich den folgenden Text übergeben, um Tastenfunktion zu senden, um zu erreichen1\n2\n3

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

1

Für Selenium WebDriver mit xpath (wenn der Schlüssel sichtbar ist):

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

oder,

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

1

Wenn Sie sich in dieser speziellen Situation befinden:

a) Sie möchten NUR die Taste drücken, haben aber kein bestimmtes WebElement zum Klicken

b) Sie verwenden Selenium 2 (webDriver)

Dann ist die Lösung:

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

1

JAVA / JavaScript:

Sie könnten es wahrscheinlich auch so machen, nicht nativ :

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.