2012-05-29 317 views
3

我使用Selenium Server(v2.21)和Selenium Java Client(v.2.21.0)自動化一個Web表單,每次輸入後需要按下Enter鍵,因爲根據輸入的值顯示字段。因此,基於該解決方案here,我一直在嘗試不同的方式來輸入一個字符串到表單,然後按Enter鍵 - 這裏是我試過的那些:在Selenium腳本中按Enter鍵

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

如何模擬的按Enter鍵

+0

你在用什麼G? Selenium WebDriver還是RC? –

回答

7

我使用下面的代碼點擊逃生輸入

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

我們需要暫停硒,直到上一個命令執行成功。所以我使用了sleep()方法。對於我的測試案例,我需要暫停700毫秒。根據您的要求,您需要更改該值。

+1

而且一個原因:[Keys enum](http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/Keys.html)旨在用於WebDriver,而不是Selenium RC。 'keyDown()'帶有「\」,後面跟着要按的鍵的數字鍵碼,通常是該鍵的ASCII值「作爲參數。但'keyPressNative()'需要「一個與java.awt.event.KeyEvent相對應的整數鍵碼號碼;請注意,Java鍵碼不同於JavaScript鍵碼!」。是的,這很混亂。還有一個理由轉向Selenium 2(WebDriver):-)。 –

+0

這樣做 - 謝謝! – user725861

1

你試過嗎?

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

誤差 「\ n」 個:'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); 

硒RC:

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

如果海報使用WebDriver,上面的代碼將很好地工作。如果使用Selenium RC,您可以使用:selenium.keyPress(「elementid」,「\ 13」); –

+0

不應該是'selenium.keyPress(「elementid」,「\\ 13」);'? –

1

試試這個。我正在測試的應用程序需要用戶執行以下步驟將值輸入到表格單元格中。 (單擊該單元格,按回車鍵,輸入數字,再次按Enter鍵完成)它正在爲我的腳本

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