Digitando a tecla Enter / Return usando Python e Selenium?

260

Estou procurando uma maneira rápida de digitar e a tecla Enter ou Return no Selenium. Infelizmente, o formulário que estou tentando testar (não meu próprio código, portanto não posso modificá-lo) não possui o botão Enviar. Ao trabalhar com ele manualmente, basta digitar ENTERou RETURN. Preciso saber como fazer isso com o typecomando Selenium, pois não há botão para clicar.

croixhaug
fonte
2
Isso pode ajudar asynchrony.blogspot.com/2008/11/…
Jonathan Parker
obrigado, era exatamente o que eu precisava!
26410 croixhaug
@ croixhaug: O que você está usando? Selenium RC ou WebDriver (Selenium 2)? E o idioma? Java? C #? ou o que?
Ripon Al Wasim
@RiponAlWasim, em 2009 (quando a pergunta foi feita) não havia WebDriver. Também as respostas para ambos estão aqui há algum tempo ...
Alex Okrushko
@AlexOkrushko: sim, você está certo
Ripon Al Wasim

Respostas:

296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

a importinstrução é para Java, para outras linguagens talvez seja diferente, por exemplo, python:from selenium.webdriver.common.keys import Keys

Ralph
fonte
25
Eu acredito que mudou. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
James Broadhead 18/01/2012
@ James Broadhead: Eu verifiquei, a classe Keys para o JAVA real ainda é (2.17.0) aindaorg.openqa.selenium.Keys
Ralph
3
Sei que o retorno é diferente de enter, mas como Keys.ENTER é diferente? (Eu acho que Keys.RETURN simplesmente torná-lo mais óbvio que é um bot fazendo a ação?)
NoBrainer
1
@NoBrainer: olhar rápido no arquivo importado vai responder a sua pergunta: RETURN = '\ue006' ENTER = '\ue007'. Mas por que? Algumas diferenças de relíquia ou sistema operacional.
Omikron
2
@NoBrainer: Enter e Return são chaves diferentes, veja a imagem deste artigo da wikipedia: en.wikipedia.org/wiki/Enter_key
Ralph
193

JAVA

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

OU,

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

PITÃO

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

OU,

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

OU,

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

OU,

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

OU,

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

C #

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

OU,

driver.FindElement(By.Id("Value")).SendKeys(Keys.Enter);
Prashanth Sams
fonte
1
Para Python, descobri que anexar "\ n" à string de entrada é o caminho mais simples a seguir. Funcionou em um campo de pesquisa.
YakovK 10/01/19
26

Agora que o Selenium 2 foi lançado, é um pouco mais fácil enviar uma chave Enter, pois você pode fazer isso com o send_keysmétodo da selenium.webdriver.remote.webelement.WebElementclasse (este código de exemplo está em Python, mas o mesmo método existe em 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")
Eli Courtwright
fonte
24

Você pode usar qualquer um Keys.ENTERouKeys.RETURN . Aqui estão alguns detalhes:

Uso:

  • Java :

    • Usando Keys.ENTER:

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

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

    • Usando Keys.ENTER:

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

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

Keys.ENTERe Keys.RETURNambos são de org.openqa.selenium.Keys, o que se estende java.lang.Enum<Keys>e implementajava.lang.CharSequence


Chaves Enum

Enum Keys são as representações de teclas pressionáveis ​​que não são texto. Eles são armazenados nos pontos de código Unicode PUA ( Área de Uso Privado ), 0xE000-0xF8FF.

Códigos-chave:

O especial keys codespara eles é o seguinte:

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

A implementação de todos os Enum Keyssão tratados da mesma maneira.

Portanto, isso é não Functional ou Operationaldiferença ao trabalhar com o SeleniumsendKeys(Keys.ENTER); ou WebElement.sendKeys(Keys.RETURN);com ele .


Tecla Enter e Return Key

Nos teclados de computador, o Enter(ou o ReturnMac OSX) na maioria dos casos faz com que uma linha de comando, formulário de janela ou caixa de diálogo opere sua função padrão. Isso normalmente termina uma "entrada" e inicia o processo desejado e geralmente é uma alternativa para pressionar um botão OK.

O Returné também muitas vezes referido como o Entere eles costumam executar funções idênticas; no entanto, em alguns aplicativos específicos (principalmente o layout da página) Returnopera especificamente como a chave de retorno de carro da qual se origina. Por outro lado, Entergeralmente é rotulado com seu nome em texto sem formatação nos teclados genéricos de PC.


Referências

DebanjanB
fonte
12

Ao escrever testes HTML, a tecla ENTER está disponível como ${KEY_ENTER} .

Você pode usá-lo com sendKeys, aqui está um exemplo:

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

Em Python

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

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

Nota: você tem que escreverKeys.ENTER

Jayesh
fonte
9

Você acabou de fazer isso:

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
fonte
só por curiosidade, por que você prefere escrever 3 linhas de código que você pode escrever em uma única linha
Shekhar Swami
9
selenium.keyPress("css=input.tagit-input.ui-autocomplete-input", "13");
Nirmal Patel
fonte
6

Para as pessoas que estão usando o WebDriverJS Keys.RETURNseriam referenciadas como

webdriver.Key.RETURN

Um exemplo mais completo como referência também pode ser útil:

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

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

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

ENTER = u '\ ue007'

consulte a documentação do selênio 'Chaves especiais'

Ashish gupta
fonte
Essa resposta funcionou, mas acidentalmente a rejeitei porque usei o número errado.
Martin Kersten
5

Gostaria apenas de observar que eu precisava disso para meus testes de pepino e descobri que, se você gosta de simular pressionando a tecla Enter / Return, precisa enviar o :returnvalor e não o :entervalor (consulte os valores descritos aqui )

Pascal Lindelauf
fonte
Isso também se aplica a um campo de texto de entrada GWT.
joescii
5

Para Selenium RC com Java:

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

Para o Selenium WebDriver (aka Selenium2) com java:

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

OU,

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

Outra maneira de pressionar Enter no WebDriver usando a classe Actions:

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

se você está procurando "como pressionar a tecla Enter do teclado no selenium webdriver (java)", o código abaixo definitivamente o ajudará.

//assign key board object
Keyboard keyboard=((HasInputDevices) driver).getKeyboard();
//enter a key
keyboard.pressKey(Keys.ENTER);
Plaban Dwivedy
fonte
1
Você poderia elaborar mais sua resposta adicionando um pouco mais de descrição sobre a solução que você fornece?
Abarisone 28/05
3

Você pode ligar submit() o objeto de elemento no qual você digitou seu texto.

Como alternativa, você pode enviar especificamente a tecla Enter, como mostrado neste snippet python:

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
entropia
fonte
2

Tente usar o XPATH para pesquisar o elemento e, em seguida, o seguinte código funcionará:

driver.findElement(By.xpath(".//*[@id='txtFilterContentUnit']")).sendKeys(Keys.ENTER);
Abhijeet
fonte
Se o elemento tem ID, é melhor ID em vez de usar xpath
Ripon Al Wasim
2

Existem as seguintes maneiras de pressionar as teclas - C #:

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

OU

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

OU

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

funciona

Sanju Abel
fonte
2

Quando você não deseja pesquisar em nenhum localizador, pode usar a classe Robot: por exemplo:

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

Para inserir chaves usando o selênio Primeiro, você precisa importar a seguinte biblioteca:

"import org.openqa.selenium.Keys"

adicione este código onde deseja inserir a chave

"WebElement.sendKeys(Keys.RETURN);"

Você pode substituir RETURN por qualquer chave da lista de acordo com sua exigência

RNS
fonte
1

Também pode ser alcançado usando a interface Action, no caso do WebDriver -

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

Para RUBY: -

driver.find_element(:id,"XYZ").send_keys:return
SoftwareTestingEnthusiast
fonte
1

Podes tentar :

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

Eu tive que enviar a tecla Enter no meio de um texto. Então, eu passei o texto a seguir para enviar teclas de função para alcançar1\n2\n3

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

Para o Selenium WebDriver usando xpath (se a chave estiver visível):

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

ou,

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

Se você estiver nessa situação específica:

a) deseja APENAS pressionar a tecla, mas não possui um elemento da web específico para clicar em

b) você está usando Selenium 2 (webDriver)

Então a solução é:

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

JAVA / JavaScript:

Provavelmente, você também poderia fazê-lo dessa maneira, de forma não nativa :

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

Para todos que usam javascript / node , isso funcionou para mim:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
Restabelecer Monica
fonte