Mengetikkan tombol Enter / Return menggunakan Python dan Selenium?

260

Saya mencari cara cepat untuk mengetik dan tombol Enter atau Return di Selenium. Sayangnya formulir yang saya coba untuk menguji (bukan kode saya sendiri sehingga saya tidak dapat memodifikasi) tidak memiliki tombol Kirim. Ketika bekerja dengannya secara manual, saya cukup ketik ENTERatau RETURN. Saya perlu tahu bagaimana melakukan itu dengan typeperintah Selenium karena tidak ada tombol untuk mengklik.

croixhaug
sumber
2
Ini mungkin membantu asynchrony.blogspot.com/2008/11/...
Jonathan Parker
terima kasih, itulah yang saya butuhkan!
croixhaug
@croixhaug: Apa yang Anda gunakan? Selenium RC atau WebDriver (Selenium 2)? Bagaimana dengan bahasa? Jawa? C #? atau apa?
Ripon Al Wasim
@RiponAlWasim, pada tahun 2009 (ketika pertanyaan diajukan) tidak ada WebDriver. Juga jawaban untuk keduanya telah di sini untuk sementara waktu ...
Alex Okrushko
@AlexOkrushko: ya, Anda benar
Ripon Al Wasim

Jawaban:

296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

yang importpernyataan untuk Java, untuk bahasa lain itu mungkin berbeda, misalnya python:from selenium.webdriver.common.keys import Keys

Muntah
sumber
25
Saya percaya bahwa itu dipindahkan. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/... )
James Broadhead
@HJames Broadhead: Saya telah memeriksanya, kelas Keys untuk JAVA yang sebenarnya (2.17.0) masihorg.openqa.selenium.Keys
Ralph
3
Saya tahu bahwa return berbeda dari enter, tetapi bagaimana Keys .ENTER berbeda? (Saya akan berpikir bahwa Keys.RETURN hanya akan membuatnya lebih jelas bahwa itu adalah bot yang melakukan tindakan?)
NoBrainer
1
@NoBrainer: Cepat melihat file yang diimpor akan menjawab pertanyaan Anda: RETURN = '\ue006' ENTER = '\ue007'. Tapi kenapa? Beberapa perbedaan peninggalan atau OS.
omikron
2
@NoBrainer: Masuk dan Kembali adalah kunci yang berbeda, lihat gambar artikel wikipedia ini: en.wikipedia.org/wiki/Enter_key
Ralph
193

JAWA

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

ATAU,

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)

ATAU,

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

ATAU,

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

RUBI

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

ATAU,

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

ATAU,

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

C #

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

ATAU,

driver.FindElement(By.Id("Value")).SendKeys(Keys.Enter);
Prashanth Sams
sumber
1
Untuk Python, saya menemukan bahwa menambahkan "\ n" ke string input adalah cara yang paling mudah. Itu bekerja di bidang pencarian.
YakovK
26

Sekarang Selenium 2 telah dirilis, sedikit lebih mudah untuk mengirim kunci Enter, karena Anda dapat melakukannya dengan send_keysmetode selenium.webdriver.remote.webelement.WebElementkelas (kode contoh ini adalah dalam Python, tetapi metode yang sama ada di Jawa):

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

Anda dapat menggunakan salah satu dari Keys.ENTERatau Keys.RETURN. Berikut ini beberapa detailnya:

Penggunaan:

  • Jawa :

    • Menggunakan Keys.ENTER:

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

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

    • Menggunakan Keys.ENTER:

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

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

Keys.ENTERdan Keys.RETURNkeduanya berasal org.openqa.selenium.Keys, yang meluas java.lang.Enum<Keys>dan mengimplementasikanjava.lang.CharSequence


Tombol Enum

Enum Keys adalah representasi dari tombol yang dapat ditekan yang bukan berupa teks. Ini disimpan dalam poin kode Unicode PUA ( Area Penggunaan Pribadi ), 0xE000-0xF8FF.

Kode Kunci:

Yang spesial keys codesuntuk mereka adalah sebagai berikut:

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

Implementasi semua Enum Keysditangani dengan cara yang sama.

Karenanya ini adalah TIDAK Functional atau Operationalperbedaan saat bekerja dengan salah satu sendKeys(Keys.ENTER);atau WebElement.sendKeys(Keys.RETURN);melalui Selenium .


Enter Key dan Return Key

Pada keyboard komputer, Enter(atau Returnpada Mac OSX) dalam banyak kasus menyebabkan baris perintah, formulir jendela, atau kotak dialog untuk mengoperasikan fungsi standarnya. Ini biasanya untuk menyelesaikan "entri" dan memulai proses yang diinginkan, dan biasanya merupakan alternatif untuk menekan tombol OK.

Ini Returnsering juga disebut sebagai Enterdan mereka biasanya melakukan fungsi yang identik; namun dalam beberapa aplikasi tertentu (terutama tata letak halaman) Returnberoperasi secara khusus seperti kunci Pengembalian Carriage dari mana asalnya. Sebaliknya, Enterini biasanya diberi label dengan namanya dalam teks biasa pada keyboard PC umum.


Referensi

DebanjanB
sumber
12

Saat menulis tes HTML, tombol ENTER tersedia sebagai ${KEY_ENTER}.

Anda dapat menggunakannya dengan sendKeys, berikut adalah contohnya:

sendKeys | id=search | ${KEY_ENTER}
Maurice Svay
sumber
11

Dengan Python

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

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

Catatan: Anda harus menulisKeys.ENTER

jayesh
sumber
9

Anda hanya melakukan ini:

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
sumber
hanya ingin tahu, mengapa Anda lebih suka menulis 3 baris kode yang dapat Anda tulis dalam satu baris
Shekhar Swami
9
selenium.keyPress("css=input.tagit-input.ui-autocomplete-input", "13");
Nirmal Patel
sumber
6

Bagi orang-orang yang menggunakan WebDriverJS Keys.RETURNakan dirujuk sebagai

webdriver.Key.RETURN

Contoh yang lebih lengkap sebagai referensi mungkin juga membantu:

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

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

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

ENTER = u '\ ue007'

lihat dokumentasi selenium 'Tombol Khusus'

Gupta Ashish
sumber
Jawaban ini berhasil tetapi tidak sengaja memilihnya karena saya menggunakan nomor yang salah.
Martin Kersten
5

Aku seperti untuk catatan bahwa saya perlu ini untuk tes Cucumber saya dan menemukan bahwa jika Anda ingin mensimulasikan menekan masuk / tombol kembali, Anda perlu mengirim :returnnilai dan tidak pada :enternilai (melihat nilai-nilai yang dijelaskan di sini )

Pascal Lindelauf
sumber
Ini juga berlaku untuk bidang teks input GWT.
joescii
5

Untuk Selenium RC dengan Java:

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

Untuk Selenium WebDriver (alias Selenium2) dengan java:

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

ATAU,

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

Cara lain untuk menekan Enter di WebDriver dengan menggunakan kelas Tindakan:

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

jika Anda mencari "cara menekan tombol enter dari keyboard di selenium webdriver (java)", maka kode di bawah ini pasti akan membantu Anda.

//assign key board object
Keyboard keyboard=((HasInputDevices) driver).getKeyboard();
//enter a key
keyboard.pressKey(Keys.ENTER);
Plaban Dwivedy
sumber
1
Bisakah Anda menjelaskan lebih lanjut jawaban Anda dengan menambahkan sedikit deskripsi tentang solusi yang Anda berikan?
abarisone
3

Anda dapat memanggil submit()objek elemen tempat Anda memasukkan teks.

Sebagai alternatif, Anda dapat secara khusus mengirim kunci enter seperti yang ditunjukkan dalam cuplikan python ini:

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
entropi
sumber
2

Coba gunakan XPATH untuk mencari elemen dan kemudian, kode berikut berfungsi:

driver.findElement(By.xpath(".//*[@id='txtFilterContentUnit']")).sendKeys(Keys.ENTER);
Abhijeet
sumber
Jika elemen memiliki ID, lebih baik menggunakan ID daripada xpath
Ripon Al Wasim
2

Ada beberapa cara berikut untuk menekan tombol - C #:

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

ATAU

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

ATAU

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

berhasil

Sanju Abel
sumber
2

Saat Anda tidak ingin mencari pelacak apa pun, Anda dapat menggunakan kelas Robot: misalnya:

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

Untuk memasukkan kunci menggunakan selenium Pertama, Anda perlu mengimpor perpustakaan berikut:

"import org.openqa.selenium.Keys"

lalu tambahkan kode ini di tempat Anda ingin memasukkan kunci

"WebElement.sendKeys(Keys.RETURN);"

Anda dapat mengganti RETURN dengan kunci apa saja dari daftar sesuai dengan kebutuhan Anda

RNS
sumber
1

Dapat dicapai menggunakan antarmuka Tindakan juga, dalam kasus WebDriver -

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

Untuk RUBY: -

driver.find_element(:id,"XYZ").send_keys:return
Peresmian Perangkat Lunak
sumber
1

Anda dapat mencoba :

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

Saya harus mengirim kunci enter di tengah teks. Jadi saya melewati teks berikut untuk mengirim fungsi tombol untuk mencapai1\n2\n3

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

Untuk Selenium WebDriver menggunakan xpath (Jika kuncinya terlihat):

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

atau,

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

Jika Anda berada dalam situasi khusus ini:

a) ingin HANYA menekan tombol, tetapi tidak memiliki webElement spesifik untuk mengklik

b) Anda menggunakan Selenium 2 (webDriver)

Maka solusinya adalah:

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

JAVA / JavaScript:

Anda mungkin dapat melakukannya dengan cara ini, secara non-native :

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

Untuk semua orang yang menggunakan javascript / simpul , ini bekerja untuk saya:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Pasang kembali Monica
sumber