【问题标题】:Press Enter key in Selenium script在 Selenium 脚本中按 Enter 键
【发布时间】:2012-05-29 13:10:41
【问题描述】:

我正在使用 Selenium Server (v2.21) 和 Selenium Java Client (v.2.21.0) 来自动化需要在每次输入后按下 Enter 键的 Web 表单,因为字段根据输入的值显示。因此,基于解决方案here,我一直在尝试不同的方法将字符串输入表单并按 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 键?

【问题讨论】:

  • 你在用什么? Selenium WebDriver 还是 RC?

标签: java selenium selenium-webdriver


【解决方案1】:

我正在使用以下代码点击Escape Enter

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

我们需要暂停 selenium,直到上一个命令成功执行。所以我正在使用 sleep() 方法。对于我的测试用例,我需要暂停 700 MillSec。根据您的要求,您需要更改值。

【讨论】:

  • 还有一个原因:Keys enum 旨在用于 WebDriver,而不是 Selenium RC。 keyDown() 采用“"\" 后跟要按下的键的数字键码,通常是该键的 ASCII 值”作为参数。但是 'keyPressNative()' 采用“与 java.awt.event.KeyEvent 相对应的整数键码编号;请注意,Java 键码与 JavaScript 键码不同!”。是的,这令人困惑。切换到 Selenium 2 (WebDriver) 的另一个原因:-)。
【解决方案2】:

在 WebDriver 中有一个类键。使用它我们可以发送 ENTER 键。 像这样

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

对于 Selenium RC:

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

【讨论】:

  • 如果poster使用WebDriver,上面的代码可以很好地工作。如果使用 Selenium RC,您可以使用:selenium.keyPress("elementid", "\13");
  • 不应该是selenium.keyPress("elementid", "\\13");吗?
【解决方案3】:

你试过了吗?

selenium.keyPressNative("\n");

【讨论】:

  • “\n”错误:ERROR - Problem during keyDown: java.lang.NumberFormatException: For input string: " " at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:449) at java.lang.Integer.parseInt(Integer.java:499) at org.openqa.selenium.server.SeleniumDriverResourceHandler.doCommand(SeleniumDriverResourceHandler.java:518) ...
【解决方案4】:

试试这个。我正在测试的应用程序要求用户执行以下步骤以将值输入到表格单元格中。 (单击单元格,按回车键,输入数字,再次按回车完成)它适用于我的脚本

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

【讨论】:

    【解决方案5】:

    如果您将 selenese 编写为 HTML(或使用 IDE),则在变量 ${KEY_ENTER} 中可以使用 ENTER 键

    这是一个使用 sendKeys 的示例:

    sendKeys | id=search | ${KEY_ENTER}
    

    您可以在此处查看所有可用密钥的列表:http://blog.reallysimplethoughts.com/2013/09/25/using-special-keys-in-selenium-ide-part-2/

    【讨论】:

      【解决方案6】:

      尝试使用 XPATH 搜索元素,然后使用以下代码。它对我有用。

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

      【讨论】:

        【解决方案7】:
        webElem=driver.findElement(By.xpath(""));
        webElem.sendKeys(Keys.TAB);
        webElem.sendKeys(Keys.ENTER);
        

        【讨论】:

          【解决方案8】:

          你试过了吗? (这是在红宝石中)

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-01
            • 1970-01-01
            • 2023-03-12
            • 1970-01-01
            • 2010-12-10
            • 1970-01-01
            相关资源
            最近更新 更多