2012-05-29 5 views
3

Я использую Selenium Server (v2.21) и Selenium Java Client (v.2.21.0) для автоматизации веб-формы, которая должна иметь . Введите, нажатый после каждой записи, поскольку поля отображаются на основе введенного значения. Таким образом, на основе решения here, я пытался различными способами, чтобы ввести строку в форму и нажмите Enter - вот те, которые я пробовал:Нажмите клавишу ввода в сценарии Selenium

// type field value 
selenium.type("program", "MIC HOMEOWNERS"); 

// ** not working: selenium.keyPress("program", "\\13"); 
// ** not working: selenium.select("program", "Program"); 
// ** not working: selenium.keyPressNative(Keys.ENTER.toString()); 
// ** not working: selenium.keyDown("program", "13"); 

Было бы показаться как это наиболее логичное решение (selenium.keyPressNative(Keys.ENTER)), но компилятор выдает ошибку, если вы не добавляете .toString, так как keyPressNative ожидает строку.

Фактический код формы:

<label >Program</label> 
    <input id="program" name="program1" class="readonly-bg" readonly="readonly" type="text" value="MIC HOMEOWNERS" size="12"/> 
    <input id="program" name="program" type="hidden" value="601"/> 
     <script type="text/javascript"> 
      Spring.addDecoration(new Spring.ElementDecoration({ 
       elementId : "program", 
       widgetType : "dijit.form.ValidationTextBox", 
       widgetAttrs : { 
        trim:true , 
        required : true 
       }})); 
     </script> 
<br> 

Как эмулировать нажатие Введите ключ?

+0

Что вы используете? г? Selenium WebDriver или RC? –

ответ

7

Я использую следующий код нажмите на незаконно освобождать из-под стражи илиВведите.

try { 
    Thread.sleep(700); 
} catch (InterruptedException e) { 
    selenium.keyPressNative("27"); // Escape 
    selenium.keyPressNative("10"); // Enter 
} 

Нам нужно приостановить селен до тех пор, пока предыдущая команда не будет выполнена успешно. Поэтому я использую метод sleep(). Для моего теста я должен был приостановить работу на 700 MillSec. Базы по вашему требованию вам нужно изменить значение.

+1

И причина: [Перечисление ключей] (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/Keys.html) предназначена для использования с WebDriver, а не с селеном RC. 'KeyDown()' принимает "" \ ", за которым следует цифровой код ключа, который нужно нажать, как правило, значение ASCII этого ключа в качестве аргумента. Но «keyPressNative()« принимает »целочисленный номер кодового номера, соответствующий java.awt.event.KeyEvent; обратите внимание, что коды ключей Java не являются тем же самым, что и коды клавиш JavaScript!». Да, это сбивает с толку. Еще одна причина переключиться на Selenium 2 (WebDriver) :-). –

+0

Это сделало - СПАСИБО !! – user725861

1

Вы пробовали это?

selenium.keyPressNative("\n"); 
+0

ошибка для "\ п": 'ERROR - проблема во время KeyDown: java.lang.NumberFormatException: Для ввода строки: " " \t в java.lang.NumberFormatException.forInputString (NumberFormatException.java:48) \t на Java .lang.Integer.parseInt (Integer.java:449) \t на java.lang.Integer.parseInt (Integer.java:499) \t в org.openqa.selenium.server.SeleniumDriverResourceHandler.doCommand (SeleniumDriverResourceHandler.java:518) ... ' – user725861

+0

Спасибо! Меня устраивает! –

0

Вы пробовали это? (это находится в рубине)

$driver.find_element(:id, "program").send_keys [:return] 
6

В WebDriver есть ключи класса. Используя это, мы можем отправить клавишу ENTER. Как это

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

для Selenium RC:

selenium.keyPress("elementid", "\\13"); // Note the double backslash 
+0

Если плакат использует WebDriver, приведенный выше код будет работать хорошо. Если используется Selenium RC, вы можете использовать: selenium.keyPress ("elementid", "\ 13"); –

+0

не должно быть 'selenium.keyPress (" elementid "," \\ 13 ");'? –

1

Попробуйте это. Приложение, которое я тестирую, требует от пользователя выполнить следующие шаги для ввода значения в ячейку таблицы. (Нажмите на ячейку, нажмите клавишу ввод, введите номер, нажмите еще раз ввести для завершения) Он работает для моего сценария

selenium.click("id_locator"); 

this.command_waitInSeconds(1); 

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

this.command_waitInSeconds(3); 

selenium.type("name=value", "10000"); 

selenium.focus("name=value"); 

selenium.keyPress("name=value", "\\13"); 
0

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

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