Введення клавіші Enter / Return за допомогою Python та Selenium?


260

Я шукаю швидкий спосіб ввести та ввести або ввести ключ у Selenium. На жаль, форма, яку я намагаюся перевірити (не власний код, тому я не можу змінювати), не має кнопки "Надіслати". Під час роботи з ним вручну я просто набираю ENTERабо RETURN. Мені потрібно знати, як це зробити за допомогою typeкоманди Selenium, оскільки немає кнопки для натискання.



дякую, саме це мені було потрібно!
croixhaug

@croixhaug: Що ти використовуєш? Selenium RC або WebDriver (Selenium 2)? Що з мовою? Java? C #? або що?
Ріпон Аль Васім

@RiponAlWasim, у 2009 році (коли було задано питання) WebDriver не було. Також відповіді для обох були тут якийсь час ...
Олексій Окрушко

@AlexOkrushko: так, ви маєте рацію
Ripon Al Wasim

Відповіді:


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
Ralph

3
Я знаю, що повернення відрізняється від Enter, але чим відрізняється Keys.ENTER? (Я б подумав, що Keys.RETURN просто зробить більш очевидним, що це бот, який робить дії?)
NoBrainer

1
@NoBrainer: Швидкий погляд на імпортований файл буде відповісти на ваше запитання: RETURN = '\ue006' ENTER = '\ue007'. Але чому? Деякі відмінності від реліктів або ОС.
омікрон

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

193

JAVA

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

RUBY

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" до вхідного рядка - це найпростіший спосіб. Це працювало в полі пошуку.
ЯковК

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);
      
  • Пітон:

    • Використання 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 - це зображення натискаючих клавіш, які не є текстовими. Вони зберігаються в Unicode PUA ( зона приватного користування) кодових точках ), 0xE000-0xF8FF.

Основні коди:

Особливі keys codesдля них такі:

  • ПОВЕРНЕННЯ =u'\ue006'
  • Вхід =u'\ue007'

Впровадження всіх Enum Keys обробляється однаково.

Отже, це немає Functional ні Operationalрізниці під час роботи з селеномsendKeys(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

У Python

Крок 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

якщо ви шукаєте "як натиснути клавішу введення з клавіатури у selenium webdriver (java)", то нижче наведений код вам точно допоможе.

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

1
Чи можете ви детальніше розглянути свою відповідь, додавши трохи більше опису про рішення, яке ви надаєте?
абарізон

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

Якщо в елементі є ідентифікатор, краще використовувати ID замість 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 = new Robot();
            robot.keyPress(KeyEvent.VK_ENTER);
            robot.keyRelease(KeyEvent.VK_ENTER);

2

Для введення ключів за допомогою селену Спочатку потрібно імпортувати таку бібліотеку:

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