在 Selenium 中键入 Enter/Return 键

Typing the Enter/Return key in Selenium

提问人:croixhaug 提问时间:10/27/2009 最后编辑:Donald Duckcroixhaug 更新时间:9/15/2023 访问量:990438

问:

我正在寻找一种在 Selenium 中键入 or 键的快速方法。EnterReturn

不幸的是,我尝试测试的表单(不是我自己的代码,所以我无法修改)没有按钮。手动使用它时,我只需键入 或 .我怎样才能用Selenium命令做到这一点,因为没有按钮可以点击?SubmitEnterReturntype

Selenium 自动化测试 按键 回车

评论

2赞 Jonathan Parker 10/27/2009
这可能 asynchrony.blogspot.com/2008/11/ 有所帮助......
0赞 Ripon Al Wasim 1/24/2013
@croixhaug:你在用什么?Selenium RC 还是 WebDriver (Selenium 2)?语言呢?爪哇岛?C#?还是什么?
0赞 Alex Okrushko 2/1/2013
@RiponAlWasim,在 2009 年(当被问到这个问题时)没有 WebDriver。此外,两者的答案都已经存在了一段时间......
0赞 Ripon Al Wasim 2/1/2013
@AlexOkrushko:是的,你是对的
0赞 cigien 11/13/2021
这篇文章正在上讨论。

答:

9赞 Nirmal Patel 10/28/2009 #1
selenium.keyPress("css=input.tagit-input.ui-autocomplete-input", "13");
29赞 Eli Courtwright 4/12/2011 #2

现在 Selenium 2 已经发布,发送 Enter 键会更容易一些,因为您可以使用类的方法来完成(此示例代码在 Python 中,但 Java 中存在相同的方法):send_keysselenium.webdriver.remote.webelement.WebElement

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

评论

2赞 Peter Mortensen 11/27/2020
或者更一般地说,在这种情况下,值来自 (import can be )。Keysselenium.webdriver.common.keys import KeysKeys.RETURN
5赞 Pascal Lindelauf 7/12/2011 #3

我只想指出,我的 Cucumber 测试需要这个,并发现如果您想模拟按 Enter/Return 键,您需要发送值而不是值(请参阅此处描述的值:return:enter)

评论

0赞 joescii 8/20/2013
对于 GWT 输入文本字段也是如此。
356赞 Ralph 8/18/2011 #4
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

import 语句用于 Java。对于其他语言,情况可能有所不同。例如,在 Python 中,它是从 selenium.webdriver.common.keys 导入密钥

评论

36赞 James Broadhead 1/19/2012
我相信它被感动了。 (stackoverflow.com/questions/5503489/...from selenium.webdriver.common.keys import Keys)
4赞 NoBrainer 9/22/2012
我知道 return 与 enter 不同,但 Keys.ENTER 有何不同?(我认为 Keys.RETURN 只会更明显地表明它是一个机器人在执行该操作?
1赞 omikron 1/22/2014
@NoBrainer:快速查看导入的文件将回答您的问题:。但是为什么?一些遗物或操作系统差异。RETURN = '\ue006'ENTER = '\ue007'
2赞 Ralph 10/4/2015
@NoBrainer:Enter 和 Return 是不同的键,请看这篇维基百科文章的图片:en.wikipedia.org/wiki/Enter_key
3赞 Guilherme 2/9/2018
对于 Python:from selenium.webdriver.common.keys import Keys password_field.send_keys(Keys.ENTER)
9赞 hoang nguyen 10/11/2012 #5

你只需这样做:

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

评论

0赞 Chandrashekhar Swami 4/13/2016
只是出于好奇,为什么你更喜欢写 3 行代码,你可以写在一行中
0赞 Peter Mortensen 11/27/2020
难道不需要某种“导入”吗?在 Python 中,它将是“”。Keysfrom selenium.webdriver.common.keys import Keys
7赞 Greg Stewart 5/17/2013 #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;
};
2赞 anujin 10/1/2013 #7

它也可以使用Action接口来实现。如果是 WebDriver -

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

评论

0赞 Peter Mortensen 11/27/2020
难道不需要某种“导入”吗?在 Python 中,它将是“”。Keysfrom selenium.webdriver.common.keys import Keys
4赞 Abhijeet 11/27/2013 #8

尝试使用 XPath 表达式搜索元素,然后,以下代码有效:

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

评论

1赞 Ripon Al Wasim 4/7/2015
如果元素有 ID,最好使用 ID 而不是 xpath
0赞 Peter Mortensen 11/27/2020
什么语言?难道不需要某种“导入”吗?在 Python 中,它将是“”。Keysfrom selenium.webdriver.common.keys import Keys
2赞 dexter 1/22/2014 #9

您可以尝试:

selenium.keyPress("id="", "\\13");
12赞 Maurice Svay 1/28/2014 #10

编写 HTML 测试时,ENTER 键以 .${KEY_ENTER}

你可以将它与 一起使用,下面是一个示例:sendKeys

sendKeys | id=search | ${KEY_ENTER}

评论

1赞 Peter Mortensen 11/27/2020
什么“语言”/语境?Bash(命令行)?Linux的?你能为你的答案添加一些背景吗?
0赞 Maurice Svay 3/1/2021
它用于 HTML 测试套件
254赞 Prashanth Sams 2/28/2014 #11

爪哇岛

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赞 YakovK 1/10/2019
对于 Python,我发现将“\n”附加到输入字符串是最直接的方法。它在搜索字段中起作用。
2赞 SoftwareTestingEnthusiast 4/12/2014 #12

对于 Ruby:

driver.find_element(:id, "XYZ").send_keys:return
6赞 Ripon Al Wasim 4/7/2015 #13

对于使用 Java 的 Selenium 远程控制

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

对于带有 Java 的 Selenium WebDriver(又名 Selenium 2):

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

套利

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

在 WebDriver 中按下的另一种方法是使用 Actions 类:Enter

Actions action = new Actions(driver);
action.sendKeys(driver.findElement(By.id("elementID")), Keys.ENTER).build().perform();
2赞 Kumrun Nahar Keya 4/7/2015 #14

对于使用 XPath 的 Selenium WebDriver(如果密钥可见):

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

driver.findElement(By.xpath("xpath of text field")).sendKeys(Keys.RETURN);
2赞 Anand 4/20/2015 #15

我不得不在短信中间发送密钥。于是我传递了以下文本来发送按键函数来实现:Enter1\n2\n3

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

评论

0赞 Peter Mortensen 11/22/2020
Re “keys function”:你的意思是(这是关于 Python 的)吗?send_keys()
2赞 Ivo Mitev 5/12/2015 #16

如果您处于此特定情况:

a) 只想按该键,但你没有特定的 webElement 可以点击

b) 您正在使用 Selenium 2 (WebDriver)

那么解决方案是:

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

评论

0赞 Peter Mortensen 11/27/2020
“webElement”是字面意思吗?
3赞 Plaban Dwivedy 5/28/2015 #17

如果您正在寻找“如何在Selenium WebDriver(Java)中从键盘上按Enter键”,那么下面的代码肯定会对您有所帮助。

// Assign a keyboard object
Keyboard keyboard = ((HasInputDevices) driver).getKeyboard();

// Enter a key
keyboard.pressKey(Keys.ENTER);

评论

1赞 abarisone 5/28/2015
您能否详细说明您的答案,并添加有关您提供的解决方案的更多描述?
6赞 Mosam Mehta 10/1/2015 #18

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

6赞 Ashish gupta 1/18/2016 #19
search = browser.find_element_by_xpath("//*[@type='text']")
search.send_keys(u'\ue007')

#ENTER = u'\ue007'

请参阅 Selenium 的文档“特殊密钥”。

评论

0赞 Martin Kersten 2/15/2016
这个答案有效,但不小心被否决了,因为我用错了号码。
0赞 Peter Mortensen 11/22/2020
你能链接到文档吗?
3赞 RNS 8/22/2016 #20

要使用 Selenium 输入密钥,首先需要导入以下库:

import org.openqa.selenium.Keys

然后将此代码添加到要输入密钥的位置

WebElement.sendKeys(Keys.RETURN);

您可以根据需要将 RETURN 替换为列表中的任何键。

评论

0赞 Peter Mortensen 11/22/2020
什么列表?你能链接到它吗?
0赞 Peter Mortensen 11/27/2020
什么语言?蟒?
2赞 djangofan 10/30/2016 #21

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);
}
3赞 Mohsin Awan 11/7/2016 #22

按键有以下几种方式 - 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赞 Jack 666 1/7/2017 #23
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);

评论

0赞 Peter Mortensen 11/27/2020
什么语言?爪哇
3赞 Sanju Abel 9/4/2017 #24
object.sendKeys("your message", Keys.ENTER);

它有效。

3赞 Krzysztof Walczewski 11/10/2017 #25

当您不想搜索任何定位器时,可以使用 Robot 类。例如

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

评论

1赞 Peter Mortensen 11/22/2020
你能链接到该课程的文档吗?Robot
43赞 undetected Selenium 12/15/2017 #26

可以使用 Keys.ENTERKeys.RETURN。以下是详细信息:

用法:

  • 爪哇

    • 使用 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.ENTERKeys.RETURN 都来自 ,它扩展并实现了 。org.openqa.selenium.Keysjava.lang.Enum<Keys>java.lang.CharSequence


枚举键

枚举键是非文本的可按键的表示形式。这些存储在 Unicode PUA(专用区)代码点中,0xE000-0xF8FF。

关键代码:

它们的特殊键代码如下:

  • 返回 = u'\ue006'
  • ENTER = u'\ue007'

所有枚举键的实现都以相同的方式处理。

因此,在使用 sendKeys(Keys.ENTER) 或 WebElement.sendKeys(Keys.RETURN) 时,这些在功能操作没有区别;通过 Selenium


输入键和返回键

在计算机键盘上,(或在 Mac OS X 上)在大多数情况下会导致命令行、窗口窗体或对话框运行其默认功能。这通常是为了完成“输入”并开始所需的过程,通常是按下按钮的替代方法。EnterReturnOK

通常也称为 ,它们通常执行相同的功能;但是,在某些特定应用程序(主要是页面布局)中,其操作方式与它源自的 Carriage Return 键类似。相比之下,通常在通用 PC 键盘上以纯文本形式标有其名称。ReturnEnterReturnEnter


引用

1赞 Lord Elrond 1/15/2019 #27

对于使用 JavaScript / Node.js 的每个人,这对我有用:

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');
16赞 jayesh 2/26/2019 #28

在 Python 中

步骤 1。 from selenium.webdriver.common.keys import Keys

第2步。 driver.find_element_by_name("").send_keys(Keys.ENTER)

注意:你必须写Keys.ENTER

4赞 entropy 2/28/2019 #29

您可以调用在其中输入文本的元素对象。submit()

或者,您可以专门将密钥发送到它,如以下 Python 代码片段所示:Enter

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
3赞 grantr 5/24/2021 #30

如果您只想按 Enter 键 (python):

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

ActionChains(driver).send_keys(Keys.ENTER).perform()

评论

0赞 zaheer 7/20/2021
这个答案在搜索完美的情况下非常有效。driver.find_element_by_xpath('//xpath').send_keys(Keys.ENTER)