Python ve Selenyum kullanarak Enter / Return tuşunu mu yazıyorsunuz?


260

Selenium'da yazıp Enter veya Return tuşunu hızlı bir şekilde arıyorum. Ne yazık ki test etmeye çalıştığım formun (kendi kodumu değiştiremiyorum, bu yüzden değiştiremiyorum) bir Gönder düğmesi yok. Elle çalışırken, sadece ENTERveya yazın RETURN. Tıklamak typeiçin hiçbir düğme olarak Selenium komutuyla bunu nasıl bilmek gerekir .



teşekkürler, tam da ihtiyacım olan buydu!
croixhaug

@croixhaug: Ne kullanıyorsun? Selenium RC veya WebDriver (Selenium 2)? Dil ne olacak? Java? C #? ya da ne?
Ripon Al Wasim

@ RiponAlWasim, 2009'da (soru sorulduğunda) WebDriver yoktu. Ayrıca her ikisinin de cevapları bir süredir burada ...
Alex Okrushko

@AlexOkrushko: evet, haklısın
Ripon Al Wasim

Yanıtlar:


296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

importifadesi bu örnek piton için belki farklı olan diğer diller için, Java için geçerli:from selenium.webdriver.common.keys import Keys


25
Hareket ettiğine inanıyorum. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
James Broadhead

@ BroadJhead: Kontrol ettim, gerçek JAVA (2.17.0) için Keys sınıfı halaorg.openqa.selenium.Keys
Ralph

3
Dönüşün enter'dan farklı olduğunu biliyorum, ancak Keys.ENTER nasıl farklı? (Keys.RETURN'un eylemi yapan bir bot olduğunu daha açık hale getireceğini düşünürdüm?)
NoBrainer

1
@NoBrainer: İçe aktarılan dosya tarafındaki Hızlı göz sorunuza cevap olacaktır: RETURN = '\ue006' ENTER = '\ue007'. Ama neden? Bazı kalıntı veya OS farklılıkları.
omikron

2
@NoBrainer: Enter ve Return farklı anahtarlar, bu wikipedia makalesinin görüntüsüne bir göz atın: en.wikipedia.org/wiki/Enter_key
Ralph

193

JAVA

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

VEYA,

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)

VEYA,

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

VEYA,

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

YAKUT

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

VEYA,

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

VEYA,

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

C #

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

VEYA,

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

1
Python için girdi dizesine "\ n" eklemenin en kolay yol olduğunu gördüm. Bir arama alanında çalıştı.
YakovK

26

Artık Selenium 2 yayınlandı, bir Enter anahtarı göndermek biraz daha kolay, çünkü sınıfın send_keysyöntemiyle yapabilirsiniz selenium.webdriver.remote.webelement.WebElement(bu örnek kod Python'da, ancak aynı yöntem Java'da var):

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

Sen birini kullanabilirsiniz Keys.ENTERveya Keys.RETURN. İşte bazı ayrıntılar:

Kullanımı:

  • Java :

    • Kullanma Keys.ENTER:

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

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

    • Kullanma Keys.ENTER:

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

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

Keys.ENTERve Keys.RETURNher ikisi de org.openqa.selenium.Keys, uzayan java.lang.Enum<Keys>ve uygulayanjava.lang.CharSequence


Numaralandırma Tuşları

Enum Tuşlar metin değildir pressable tuşların gösterimleri olduğunu. Bunlar Unicode PUA ( Özel Kullanım Alanı ) kod noktalarında (0xE000-0xF8FF) saklanır.

Anahtar Kodlar:

Onlar için özel keys codesolan aşağıdaki gibidir:

  • DÖNÜŞ =u'\ue006'
  • ENTER =u'\ue007'

Hepsinin uygulanması Enum Keysaynı şekilde ele alınır.

Bu nedenle, bunlar Selenyum ile veya Selenyum yoluyla çalışırken Hayır Functional veya Operationalfarktır .sendKeys(Keys.ENTER);WebElement.sendKeys(Keys.RETURN);


Enter Anahtarı ve Return Anahtarı

Bilgisayar klavyelerinde, Enter(veya ReturnMac OSX'te) çoğu durumda bir komut satırı, pencere formu veya iletişim kutusunun varsayılan işlevini çalıştırmasına neden olur. Bu genellikle bir "girişi" bitirmek ve istenen işleme başlamak içindir ve genellikle bir OK düğmesine basmak için bir alternatiftir.

ReturnGenellikle aynı zamanda şu şekilde de ifade edilir Enterve genellikle aynı fonksiyonları yerine; ancak bazı belirli uygulamalarda (çoğunlukla sayfa düzeni) Return, kaynaklandığı Taşıyıcı Dönüş tuşu gibi çalışır . Buna karşılık, Entergenel PC klavyelerinde adı düz metin olarak etiketlenir.


Referanslar


12

HTML testleri yazarken ENTER tuşu olarak kullanılabilir ${KEY_ENTER}.

İle kullanabilirsiniz sendKeys, işte bir örnek:

sendKeys | id=search | ${KEY_ENTER}

11

Python bölgesinde

Aşama 1. from selenium.webdriver.common.keys import Keys

Adım 2. driver.find_element_by_name("").send_keys(Keys.ENTER)

Not: yazmak zorundaKeys.ENTER


9

Bunu sadece siz yapın:

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

meraktan, neden tek bir satırda yazabileceğiniz 3 satır kod yazmayı tercih edersiniz?
Shekhar Swami


6

WebDriverJS kullanan bu millet için Keys.RETURNbaşvurulan olacağını

webdriver.Key.RETURN

Referans olarak daha eksiksiz bir örnek de yardımcı olabilir:

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

selenyum belgelerine bakın 'Özel Anahtarlar'


Bu cevap işe yaradı ama yanlışlıkla oy kullandım çünkü yanlış numarayı kullandım.
Martin Kersten

5

Sadece benim Salatalık testler için bu gerekli ve girdiğiniz / dönüş tuşuna basarak simüle etmek isterseniz, göndermek gerektiğini öğrendim o nota gibi :returndeğer ve değil:enter değer (değerler tarif bakınız burada )


Bu, bir GWT giriş metin alanı için de geçerlidir.
joescii

5

Java ile Selenium RC için:

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

Java ile Selenium WebDriver (aka Selenium2) için:

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

VEYA,

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

Actions sınıfını kullanarak WebDriver'da Enter tuşuna basmanın başka bir yolu:

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

3

"selenyum webdriver'da (java) klavyeden enter tuşuna nasıl basacağınız" arıyorsanız, aşağıdaki kod kesinlikle size yardımcı olacaktır.

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

1
Verdiğiniz çözüm hakkında biraz daha açıklama ekleyerek cevabınızı biraz daha açıklayabilir misiniz?
abarisone

3

submit()Metninizi girdiğiniz öğe nesnesini arayabilirsiniz .

Alternatif olarak, enter tuşunu bu python snippet'inde gösterildiği gibi özel olarak gönderebilirsiniz:

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

Elemanı aramak için XPATH kullanmaya çalışın ve sonra aşağıdaki kod çalışır:

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

Öğenin kimliği varsa, xpath yerine kimlik kullanmak daha iyidir
Ripon Al Wasim

2

- C # tuşlarına basmanın aşağıdaki yolları vardır:

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

VEYA

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

VEYA

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


2

Herhangi bir konumlandırıcı aramak istemediğinizde, Robot sınıfını kullanabilirsiniz: örneğin:

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

2

Selenyum kullanarak anahtar girmek için İlk önce aşağıdaki kitaplığı içe aktarmanız gerekir:

"import org.openqa.selenium.Keys"

sonra bu kodu anahtar girmek istediğiniz yere ekleyin

"WebElement.sendKeys(Keys.RETURN);"

İhtiyacınıza göre RETURN'u listedeki herhangi bir tuşla değiştirebilirsiniz


1

WebDriver durumunda Action arayüzü kullanılarak da gerçekleştirilebilir -

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



1

Metnin ortasına enter tuşu göndermek zorunda kaldım. Bu yüzden ulaşmak için anahtarlar işlevini göndermek için aşağıdaki metni geçtim1\n2\n3

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

1

Xpath kullanan Selenium WebDriver için (Anahtar görünürse):

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

veya,

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

1

Bu özel durumdaysanız:

a) SADECE tuşa basmak istiyorum, ancak tıklamak için belirli bir webElement'e sahip değilsiniz

b) Selenium 2 (webDriver) kullanıyorsanız

Sonra çözüm:

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

1

JAVA / JavaScript:

Muhtemelen bu şekilde de yapabilirsiniz, doğal olarak :

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.