Набираете клавишу Enter / Return, используя Python и Selenium?


260

Я ищу быстрый способ ввода и ввода или возврата ключа в Selenium. К сожалению, форма, которую я пытаюсь проверить (не мой собственный код, поэтому я не могу изменить), не имеет кнопки Отправить. При работе с ним вручную я просто набираю ENTERили RETURN. Мне нужно знать, как это сделать с помощью typeкоманды Selenium, так как кнопка не нажимается.



спасибо, это было именно то, что мне было нужно!
Croixhaug

@croixhaug: что вы используете? Selenium RC или WebDriver (Selenium 2)? Как насчет языка? Ява? C #? или что?
Рипон Аль-Васим

@RiponAlWasim, в 2009 году (когда был задан вопрос) не было WebDriver. Кроме того, ответы на оба были здесь некоторое время ...
Алекс Окрушко

@AlexOkrushko: да, вы правы
Рипон Аль-Васим

Ответы:


296
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

importутверждение для Java, для других языков , это может быть другим, например , питон:from selenium.webdriver.common.keys import Keys


25
Я верю, что это перенесено. from selenium.webdriver.common.keys import Keys( stackoverflow.com/questions/5503489/… )
Джеймс Бродхед

@HJames Broadhead: Я проверил это, класс Keys для фактической JAVA (2.17.0) по-прежнемуorg.openqa.selenium.Keys
Ральф

3
Я знаю, что return отличается от enter, но чем отличается Keys.ENTER? (Я думаю, что Keys.RETURN просто сделает более очевидным, что это бот выполняет действие?)
NoBrainer

1
@NoBrainer: Быстрый просмотр импортированного файла ответит на ваш вопрос RETURN = '\ue006' ENTER = '\ue007'. Но почему? Некоторые реликтовые или ОС различия.
omikron

2
@NoBrainer: Enter и Return - это разные ключи, взгляните на изображение этой статьи в Википедии: en.wikipedia.org/wiki/Enter_key
Ральф

193

ЯВА

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

ИЛИ,

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

ПИТОН

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

ИЛИ,

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

ИЛИ,

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

РУБИН

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

ИЛИ,

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

ИЛИ,

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

C #

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

ИЛИ,

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

1
Для Python я обнаружил, что добавление «\ n» к входной строке - самый простой способ. Он работал в поле поиска.
YakovK

26

Теперь, когда Selenium 2 был выпущен, немного проще отправить ключ Enter, поскольку вы можете сделать это с помощью send_keysметода selenium.webdriver.remote.webelement.WebElementкласса (этот пример кода на Python, но тот же метод существует на 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

Вы можете использовать любой из Keys.ENTERили Keys.RETURN. Вот некоторые детали:

Использование :

  • Java :

    • Использование Keys.ENTER:

      import org.openqa.selenium.Keys;
      driver.findElement(By.id("element_id")).sendKeys(Keys.ENTER);
      
    • С помощью Keys.RETURN

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

    • Использование Keys.ENTER:

      from selenium.webdriver.common.keys import Keys
      driver.find_element_by_id("element_id").send_keys(Keys.ENTER)
      
    • С помощью Keys.RETURN

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

Keys.ENTERи Keys.RETURNоба из org.openqa.selenium.Keys, который расширяет java.lang.Enum<Keys>и реализуетjava.lang.CharSequence


Enum Keys

Enum Keys представляет собой нажатия клавиш, которые не являются текстовыми. Они хранятся в кодовых точках Unicode PUA ( частная область использования ), 0xE000-0xF8FF.

Ключевые коды:

Специальные keys codesдля них следующие:

  • ВОЗВРАТ =u'\ue006'
  • ENTER =u'\ue007'

Реализация всех Enum Keysобрабатывается одинаково.

Следовательно, нет Functional или нетOperational разницы при работе с SeleniumsendKeys(Keys.ENTER); или WebElement.sendKeys(Keys.RETURN);через него .


Введите ключ и ключ возврата

На клавиатурах компьютера Enter(или Returnна Mac OSX) в большинстве случаев командная строка, окно или диалоговое окно работают по умолчанию. Обычно это завершает «ввод» и начинает нужный процесс, и обычно является альтернативой нажатию кнопки «ОК».

Их Returnчасто называют также Enterи они обычно выполняют идентичные функции; однако в некоторых конкретных приложениях (в основном макет страницы) Returnдействует, в частности, как ключ возврата каретки, из которого он исходит. Напротив, они Enterобычно обозначаются своим именем в виде обычного текста на обычных клавиатурах ПК.


Ссылки


12

При написании HTML-тестов клавиша ENTER доступна как ${KEY_ENTER}.

Вы можете использовать его sendKeys, вот пример:

sendKeys | id=search | ${KEY_ENTER}

11

В питоне

Шаг 1. from selenium.webdriver.common.keys import Keys

Шаг 2. driver.find_element_by_name("").send_keys(Keys.ENTER)

Примечание: вы должны написатьKeys.ENTER


9

Вы просто делаете это:

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

просто из любопытства, почему вы предпочитаете писать 3 строки кода, которые вы можете написать в одну строку
Шекхар Свами,


6

Для тех людей, которые используют WebDriverJS Keys.RETURNбудет упоминаться как

webdriver.Key.RETURN

Также может быть полезен более полный пример в качестве ссылки:

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
search = browser.find_element_by_xpath("//*[@type='text']")
search.send_keys(u'\ue007')

ENTER = u '\ ue007'

обратитесь к документации по селену «Специальные ключи»


Этот ответ работает, но случайно проголосовал за него, потому что я использовал неправильный номер.
Мартин Керстен

5

Я просто хотел бы отметить , что мне нужно это для моих тестов огурцов и выяснил , что , если вы хотите , чтобы имитировать нажатие Enter / Return ключа, вам нужно отправить :returnзначение и не на :enterвеличину (см значение описано здесь )


Это также верно для входного текстового поля GWT.
Joescii

5

Для Selenium RC с Java:

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

Для Selenium WebDriver (также известный как Selenium2) с Java:

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

ИЛИ,

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

Еще один способ нажать Enter в WebDriver с помощью класса Actions:

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

3

Если вы ищете «как нажать клавишу ввода на клавиатуре в Selena WebDriver (Java)», то приведенный ниже код определенно вам поможет.

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

1
Не могли бы вы более подробно изложить свой ответ, добавив немного больше описания предлагаемого вами решения?
abarisone

3

Вы можете вызвать submit()элемент объекта, в который вы ввели свой текст.

В качестве альтернативы вы можете отправить ему ключ ввода, как показано в следующем фрагменте кода 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

2

Попробуйте использовать XPATH для поиска элемента, а затем, следующий код работает:

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

Если элемент имеет идентификатор, лучше использовать идентификатор вместо xpath
Ripon Al Wasim

2

Существуют следующие способы нажатия клавиш - C #:

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

ИЛИ

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

ИЛИ

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


2

Если вы не хотите искать какой-либо локатор, вы можете использовать класс Robot: например:

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

2

Для ввода ключей с помощью Selen First вам необходимо импортировать следующую библиотеку:

"import org.openqa.selenium.Keys"

затем добавьте этот код, где вы хотите ввести ключ

"WebElement.sendKeys(Keys.RETURN);"

Вы можете заменить RETURN на любые ключи из списка в соответствии с вашими требованиями.


1

Это может быть достигнуто с помощью интерфейса Action, в случае WebDriver -

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



1

Мне пришлось отправить ключ ввода в середине текста. Поэтому я передал следующий текст, чтобы отправить функцию клавиш для достижения1\n2\n3

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

1

Для Selenium WebDriver с использованием xpath (если ключ виден):

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

или,

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

1

Если вы находитесь в этой конкретной ситуации:

а) хочу просто нажать клавишу, но не иметь определенного веб-элемента, чтобы нажать на

б) вы используете Selenium 2 (webDriver)

Тогда решение:

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

1

JAVA / JavaScript:

Вы, вероятно, могли бы сделать это и не так :

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.