如何使用Selenium将关键和弦发送到文本区域

本文关键字:文本 区域 Selenium 何使用 | 更新日期: 2023-09-27 18:19:44

我想模拟一个用户在文本区域中按下shift回车键。这是我正在使用的代码:

var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://pagewithtextarea");
var textarea = driver.FindElement(By.Id("myTextArea"));
//Send text
textarea.SendKeys("hello world!");

如果我想模拟按下回车键,我可以说:

textarea.SendKeys(Keys.Enter);

如何模拟按下shift键并同时输入?

如何使用Selenium将关键和弦发送到文本区域

比我预期的要简单。由于SendKeys需要一个字符串,而Keys上的静态常量都是字符串,所以它们可以简单地连接在一起,如下所示:

textarea.SendKeys(Keys.Shift + Keys.Enter);

对我来说,在c#上只有这个变体有效:

actions.KeyDown(Keys.Control);
actions.SendKeys("a");
actions.KeyUp(Keys.Control);

如果你可能会反复做一些事情,那么为它做一个扩展方法可能是值得的。我这样做是因为.Clear()由于某种原因在我们的web应用程序中不起作用。与其总是发送CTRL+A'b,我只是用以下内容扩展了它:

public static class ExtensionMethods
{
    public static void Blank(this IWebElement _el)
    {
        _el.SendKeys(Keys.Control + "a");
        _el.SendKeys("'b");
    }
}

然后我只需要调用dynEl.Blank();,它工作得很好。

以下是keys.chord()在JavaScript中的实现方式:https://github.com/SeleniumHQ/selenium/blob/d8ddb4d83972df0f565ef65264bcb733e7a94584/javascript/node/selenium-webdriver/lib/input.js#L135

这已经非常接近公认的最高答案了,我认为唯一的区别是末尾添加了Null字符。您可能会制作一个helper方法来帮助您记住它,但不幸的是,OpenQA.Selenium.Keys是一个静态类,它的所有属性都返回字符串。因此,如果你想在它周围做一个很好的包装器,你可能也必须包装密钥类。

在Java中,我们有chord方法,这个方法会一起发送密钥序列:

textArea.SendKeys( Keys.chord(Keys.Control , "a" ) );

textArea.SendKeys( Keys.chord ( Keys.Shift,Keys.Enter ) );