ChatGPT解决这个技术问题 Extra ChatGPT

在 Selenium 中键入 Enter/Return 键

我正在寻找一种在 Selenium 中键入 Enter 或 Return 键的快速方法。

不幸的是,我要测试的表单(不是我自己的代码,所以我无法修改)没有 Submit 按钮。手动使用它时,我只需键入 EnterReturn。由于没有可单击的按钮,我如何使用 Selenium type 命令执行此操作?

@croixhaug:你在用什么? Selenium RC 或 WebDriver (Selenium 2)?语言呢?爪哇? C#?或者是什么?
@RiponAlWasim,在 2009 年(被问到问题时)没有 WebDriver。两者的答案也已经存在了一段时间......
@AlexOkrushko:是的,你是对的
这篇文章正在 meta 上讨论。

U
U12-Forward
import org.openqa.selenium.Keys

WebElement.sendKeys(Keys.RETURN);

import 语句用于 Java。对于其他语言,可能会有所不同。例如,在 Python 中它是 from selenium.webdriver.common.keys import Keys


我相信它已经移动了。 from selenium.webdriver.common.keys import Keys (stackoverflow.com/questions/5503489/…)
我知道 return 与 enter 不同,但 Keys.ENTER 有何不同? (我认为 Keys.RETURN 只会让它更明显地表明它是一个机器人在做这个动作?)
@NoBrainer:快速查看导入的文件将回答您的问题:RETURN = '\ue006' ENTER = '\ue007'。但为什么?一些遗物或操作系统差异。
@NoBrainer:Enter 和 Return 是不同的键,看看这篇维基百科文章的图片:en.wikipedia.org/wiki/Enter_key
对于蟒蛇:from selenium.webdriver.common.keys import Keys password_field.send_keys(Keys.ENTER)
P
Prashanth Sams

爪哇

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

或者,

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

Python

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

对于 Python,我发现将“\n”附加到输入字符串是最直接的方法。它在搜索领域工作。
u
undetected Selenium

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

用法:

Java:使用 Keys.ENTER:导入 org.openqa.selenium.Keys; driver.findElement(By.id("element_id")).sendKeys(Keys.ENTER);使用 Keys.RETURN:导入 org.openqa.selenium.Keys; driver.findElement(By.id("element_id")).sendKeys(Keys.RETURN);

使用 Keys.ENTER:导入 org.openqa.selenium.Keys; driver.findElement(By.id("element_id")).sendKeys(Keys.ENTER);

使用 Keys.RETURN:导入 org.openqa.selenium.Keys; driver.findElement(By.id("element_id")).sendKeys(Keys.RETURN);

Python: 使用 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: 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.Keys,它扩展了 java.lang.Enum<Keys> 并实现了 java.lang.CharSequence

枚举键

枚举键 是非文本的可按下键的表示。这些存储在 Unicode PUA (Private Use Area) 代码点 0xE000-0xF8FF 中。

关键代码:

它们的特殊 keys codes 如下:

返回 = u'\ue006'

ENTER = u'\ue007'

所有 Enum Keys 的实现都以相同的方式处理。

因此,在使用 sendKeys(Keys.ENTER);Operational 时,这些是 No FunctionalOperational 区别>WebElement.sendKeys(Keys.RETURN);Selenium

输入键和返回键

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

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

参考

回车键

回车


U
U12-Forward

现在 Selenium 2 已经发布,发送 Enter 键会更容易一些,因为您可以使用 selenium.webdriver.remote.webelement.WebElement 类的 send_keys 方法来完成(此示例代码在 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")

或更一般地,来自 Keys 的值(导入可以是 selenium.webdriver.common.keys import Keys),在这种情况下为 Keys.RETURN
j
jww

在 Python 中

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

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

注意:你必须写 Keys.ENTER


A
Ajinkya

编写 HTML 测试时,ENTER 键可用作 ${KEY_ENTER}

您可以将它与 sendKeys 一起使用,这是一个示例:

sendKeys | id=search | ${KEY_ENTER}

什么“语言”/上下文? Bash(命令行)? Linux?您可以在答案中添加一些上下文吗?
它适用于 HTML 测试套件
a
alecxe
selenium.keyPress("css=input.tagit-input.ui-autocomplete-input", "13");

P
Peter Mortensen

你只需这样做:

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 行代码
Keys 不需要“导入”吗?在 Python 中,它将是“from selenium.webdriver.common.keys import Keys”。
a
alecxe

对于那些使用 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;
};

M
Mosam Mehta

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


P
Peter Mortensen

对于使用 Java 的 Selenium Remote Control

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 中按 Enter 的另一种方法是使用 Actions 类:

Actions action = new Actions(driver);
action.sendKeys(driver.findElement(By.id("elementID")), Keys.ENTER).build().perform();

P
Peter Mortensen
search = browser.find_element_by_xpath("//*[@type='text']")
search.send_keys(u'\ue007')

#ENTER = u'\ue007'

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


这个答案有效,但由于我使用了错误的号码而意外否决了它。
您可以链接到文档吗?
P
Pascal Lindelauf

我只是想指出,我的 Cucumber 测试需要这个,并发现如果您想模拟按 Enter/Return 键,则需要发送 :return 值而不是 {3 } 值(参见描述的值 here


对于 GWT 输入文本字段也是如此。
P
Peter Mortensen

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

或者,您可以专门向其发送 Enter 键,如以下 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

P
Peter Mortensen

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

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

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

您能否详细说明您的答案,添加更多关于您提供的解决方案的描述?
P
Peter Mortensen

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

import org.openqa.selenium.Keys

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

WebElement.sendKeys(Keys.RETURN);

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


什么清单?你能链接到它吗?
什么语言? Python?
P
Peter Mortensen

按键有以下几种方式 - 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);

P
Peter Mortensen
object.sendKeys("your message", Keys.ENTER);

有用。


P
Peter Mortensen

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

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

您可以链接到 Robot 类的文档吗?
P
Peter Mortensen

尝试使用 XPath 表达式来搜索元素,然后,以下代码可以工作:

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

如果元素有ID,最好用ID代替xpath
什么语言? Keys 不需要“导入”吗?在 Python 中,它将是“from selenium.webdriver.common.keys import Keys”。
g
grantr

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

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

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

这个答案完美地工作driver.find_element_by_xpath('//xpath').send_keys(Keys.ENTER),以防搜索完美地工作。
i
iamsankalp89
Actions action = new Actions(driver);
action.sendKeys(Keys.RETURN);

什么语言? Java
P
Peter Mortensen

对于红宝石:

driver.find_element(:id, "XYZ").send_keys:return

P
Peter Mortensen

对于使用 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);

P
Peter Mortensen

我必须在文本中间发送 Enter 键。于是我通过下面的文字发送按键功能来实现1\n2\n3

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

Re“keys function”:你的意思是send_keys()(这是关于Python的)吗?
P
Peter Mortensen

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

P
Peter Mortensen

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

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

Keys 不需要“导入”吗?在 Python 中,它将是“from selenium.webdriver.common.keys import Keys”。
P
Peter Mortensen

你可以试试:

selenium.keyPress("id="", "\\13");

P
Peter Mortensen

如果您处于这种特定情况:

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

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

那么解决方案是:

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

“webElement”是字面意思吗?
P
Peter Mortensen

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

driver.findElement(By.xpath('xpath')).sendKeys('ENTER');