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

C# 如何使用Selenium将关键和弦发送到文本区域?,c#,selenium-webdriver,C#,Selenium Webdriver,我想模拟一个用户在文本区域中按下shift-enter键。以下是我正在使用的代码: var driver = new FirefoxDriver(); driver.Navigate().GoToUrl("http://pagewithtextarea"); var textarea = driver.FindElement(By.Id("myTextArea")); //Send text textarea.SendKeys("hello world!"); 如果我想模拟按下回车键,我可以说

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

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键和enter键?

比我预期的要简单。由于SendKeys接受一个字符串,并且键上的静态常量都是字符串,因此它们可以像这样简单地连接在一起:

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

在Java中,我们有
chord
方法,该方法将一起发送键序列:

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


如果您可能会反复做一些事情,那么为其创建一个扩展方法可能是值得的。我这样做是因为
.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()而且效果很好。

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

actions.KeyDown(Keys.Control);
actions.SendKeys("a");
actions.KeyUp(Keys.Control);
下面是如何在JavaScript中实现keys.chord()


这已经非常接近被接受的答案了,我认为唯一的区别是结尾添加了空字符。您可能会创建一个帮助器方法来帮助您记住它,但不幸的是,
OpenQA.Selenium.Keys
是一个静态类,它的所有属性都返回字符串。因此,如果您想对其进行良好的包装,您可能还必须对keys类进行包装。

很高兴这对您有用。不幸的是,这在IE9或Chrome中不适用:
.SendKeys(Keys.Control+“A”)有什么建议吗?我让Selenium在IE中工作的成功率有限。我会查看您的浏览器安全设置,看看是否有什么东西阻止Selenium完全控制浏览器。@BrettVeenstra,尝试使用
.SendKeys(Keys.Control+“a”)
而不是
.SendKeys(Keys.Control+“A”)
Try
webElement.SendKeys(Keys.LeftControl+a)谢谢你的想法。我修改它以返回元素,以便将命令链接在一起。[element].ClearField().SendKeys(“标题”)
actions.KeyDown(Keys.Control);
actions.SendKeys("a");
actions.KeyUp(Keys.Control);