Wpisywanie klawisza Enter / Return za pomocą Pythona i Selenium?


260

Szukam szybkiego sposobu na wpisanie i naciśnięcie klawisza Enter lub Return w Selenium. Niestety formularz, który próbuję przetestować (nie mój własny kod, więc nie mogę go modyfikować) nie ma przycisku Prześlij. Podczas pracy z nim po prostu piszę ENTERlub RETURN. Muszę wiedzieć, jak to zrobić za pomocą typepolecenia Selenium, ponieważ nie ma przycisku do kliknięcia.



dzięki, właśnie tego potrzebowałem!
croixhaug

@croixhaug: Czego używasz? Selenium RC czy WebDriver (Selenium 2)? Co z językiem? Jawa? DO#? albo co?
Ripon Al Wasim

@RiponAlWasim, w 2009 roku (kiedy zadano pytanie) nie było WebDriver. Odpowiedzi dla obu są tu już od jakiegoś czasu ...
Alex Okrushko

@AlexOkrushko: tak, masz rację
Ripon Al Wasim

Odpowiedzi:


296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

importstwierdzenie jest dla Javy, dla innych języków to może inna, na przykład python:from selenium.webdriver.common.keys import Keys


25
Wierzę, że się poruszył. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/... )
James Broadhead,

@HJames Broadhead: Sprawdziłem, że klasa Keys dla rzeczywistej JAVA (2.17.0) jest nadalorg.openqa.selenium.Keys
Ralph

3
Wiem, że return różni się od enter, ale czym różni się Keys.ENTER? (Sądzę, że Keys.RETURN po prostu uczyniłoby to bardziej oczywistym, że to bot wykonuje akcję?)
NoBrainer

1
@NoBrainer: Szybkie spojrzenie na importowanego pliku będzie odpowiedzieć na pytanie: RETURN = '\ue006' ENTER = '\ue007'. Ale dlaczego? Niektóre różnice w reliktach lub systemach operacyjnych.
omikron

2
@NoBrainer: Enter i Return to różne klucze, spójrz na zdjęcie tego artykułu z Wikipedii: en.wikipedia.org/wiki/Enter_key
Ralph

192

JAWA

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

LUB,

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

PYTON

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

LUB,

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

LUB,

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

LUB,

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

LUB,

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

DO#

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

LUB,

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

1
Dla Pythona stwierdziłem, że dołączenie „\ n” do ciągu wejściowego jest najprostszym sposobem. Działa w polu wyszukiwania.
YakovK,

26

Teraz, gdy Selenium 2 zostało wydane, trochę łatwiej jest wysłać klucz Enter, ponieważ można to zrobić za pomocą send_keysmetody selenium.webdriver.remote.webelement.WebElementklasy (ten przykładowy kod znajduje się w Pythonie, ale ta sama metoda istnieje w Javie):

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

Można użyć jednej z Keys.ENTERlub Keys.RETURN. Oto kilka szczegółów:

Stosowanie :

  • Java :

    • Używanie Keys.ENTER:

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

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

    • Używanie Keys.ENTER:

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

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

Keys.ENTERi Keys.RETURNoba pochodzą z org.openqa.selenium.Keys, który rozszerza java.lang.Enum<Keys>i implementujejava.lang.CharSequence


Klucze Enum

Enum Keys to reprezentacje klawiszy możliwych do naciśnięcia, które nie są tekstem. Są one przechowywane w punktach kodowych Unicode PUA ( Private Use Area ), 0xE000-0xF8FF.

Kluczowe kody:

Specjalne keys codesdla nich są następujące:

  • POWRÓT =u'\ue006'
  • ENTER =u'\ue007'

Realizacja wszystkich Enum Keysjest obsługiwana w ten sam sposób.

Stąd nich jest No Functional lub Operationalróżnica w czasie pracy albo z sendKeys(Keys.ENTER);lub WebElement.sendKeys(Keys.RETURN);poprzez selen .


Wprowadź klucz i klawisz powrotu

Na klawiaturach komputerowych Enter (lub Returnw systemie Mac OSX) w większości przypadków powoduje uruchomienie domyślnej funkcji wiersza polecenia, formularza okna lub okna dialogowego. Zwykle służy to zakończeniu „wpisu” i rozpoczęciu pożądanego procesu i zwykle stanowi alternatywę dla naciśnięcia przycisku OK.

ReturnJest często określany również jako Enteri oni zwykle wykonywać identyczne funkcje; jednak w niektórych szczególnych aplikacjach (głównie układ strony) Returndziała szczególnie podobnie jak powrót karetki klawisz , z którego pochodzi. W przeciwieństwie do tego Enterjest powszechnie oznaczany nazwą zwykłego tekstu na zwykłych klawiaturach komputerowych.


Bibliografia


12

Podczas pisania testów HTML klawisz ENTER jest dostępny jako ${KEY_ENTER}.

Możesz go używać z sendKeys, oto przykład:

sendKeys | id=search | ${KEY_ENTER}

11

W Pythonie

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

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

Uwaga: musisz pisaćKeys.ENTER


9

Po prostu zrób to:

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

po prostu z ciekawości, dlaczego wolisz pisać 3 wiersze kodu, które możesz napisać w jednym wierszu
Shekhar Swami,


6

Dla tych, którzy używają WebDriverJS Keys.RETURNbędzie oznaczony jako

webdriver.Key.RETURN

Pomocniejszy może być również pełniejszy przykład jako odniesienie:

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

zapoznaj się z dokumentacją selenu „Klucze specjalne”


Ta odpowiedź działa, ale przypadkowo ją przegłosowała, ponieważ użyłem niewłaściwego numeru.
Martin Kersten

5

I podobnie jak zauważyć, że musiałem to dla moich testów ogórek i okazało się, że jeśli chcesz, aby symulować naciśnięcie klawisza ENTER / powrotu, trzeba wysłać :returnwartość i nie na :enterwartość (patrz wartości opisane tutaj )


Dotyczy to również wejściowego pola tekstowego GWT.
joescii

5

W przypadku Selenium RC z Javą:

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

Dla Selenium WebDriver (alias Selenium2) z Javą:

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

LUB,

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

Innym sposobem na naciśnięcie Enter w WebDriver za pomocą klasy Actions:

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

3

jeśli szukasz „jak nacisnąć klawisz Enter z klawiatury w selenium webdriver (java)”, to poniższy kod na pewno Ci pomoże.

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

1
Czy mógłby Pan uściślić swoją odpowiedź, dodając nieco więcej opisu oferowanego rozwiązania?
abarisone

3

Możesz wywołać submit()obiekt elementu, w którym wpisałeś swój tekst.

Alternatywnie możesz specjalnie wysłać do niego klucz Enter, jak pokazano w tym fragmencie kodu w pythonie:

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

Spróbuj użyć XPATH do wyszukiwania elementu, a następnie działa następujący kod:

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

Jeśli element ma identyfikator, lepiej użyć identyfikatora zamiast xpath
Ripon Al Wasim

2

Istnieją następujące sposoby naciskania klawiszy - C #:

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

LUB

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

LUB

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


2

Jeśli nie chcesz przeszukiwać żadnego lokalizatora, możesz użyć klasy Robot: np .:

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

2

Aby wprowadzić klucze za pomocą selenu Najpierw musisz zaimportować następującą bibliotekę:

"import org.openqa.selenium.Keys"

następnie dodaj ten kod w miejscu, w którym chcesz wprowadzić klucz

"WebElement.sendKeys(Keys.RETURN);"

Możesz zastąpić POWRÓT dowolnymi kluczami z listy zgodnie z własnymi wymaganiami


1

Można to osiągnąć również za pomocą interfejsu Action, w przypadku WebDriver -

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



1

Musiałem wysłać klawisz Enter w środku tekstu. Przekazałem więc następujący tekst, aby wysłać funkcję kluczy1\n2\n3

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

1

W przypadku Selenium WebDriver za pomocą xpath (jeśli klucz jest widoczny):

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

lub,

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

1

Jeśli jesteś w tej konkretnej sytuacji:

a) chcę po prostu nacisnąć klawisz, ale nie mieć konkretnego elementu webElement do kliknięcia

b) używasz Selenium 2 (webDriver)

Zatem rozwiązaniem jest:

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

1

JAVA / JavaScript:

Prawdopodobnie możesz to zrobić również w ten sposób, nienatywnie :

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


0

Dla wszystkich używających javascript / node działało to dla mnie:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.