Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Selenium中SendKeys()和Keydown()之间的差异_C#_Selenium_Action_Keydown_Sendkeys - Fatal编程技术网

C# Selenium中SendKeys()和Keydown()之间的差异

C# Selenium中SendKeys()和Keydown()之间的差异,c#,selenium,action,keydown,sendkeys,C#,Selenium,Action,Keydown,Sendkeys,我正在使用Actions类对FireFox驱动程序进行C#selenium自动化测试 我正在测试自动保存文本区域(单击文本区域以使内容可编辑,并更改任何内容以单击外部的任何位置/单击选项卡以自动保存文本内容) 最初我使用以下代码1,它只执行“Control+a”操作,但不执行其余操作: actions = new Actions(this._driver); actions.MoveToElement(element); actions.SendKeys(Keys.Control + 'a').

我正在使用Actions类对FireFox驱动程序进行C#selenium自动化测试

我正在测试自动保存文本区域(单击文本区域以使内容可编辑,并更改任何内容以单击外部的任何位置/单击选项卡以自动保存文本内容)

最初我使用以下代码1,它只执行“Control+a”操作,但不执行其余操作:

actions = new Actions(this._driver);
actions.MoveToElement(element);
actions.SendKeys(Keys.Control + 'a').Build().Perform();
actions.SendKeys(Keys.Backspace).Build().Perform();
actions.SendKeys("new input").SendKeys(Keys.Tab).Build().Perform();
然后我把它改成下面的代码2,它可以工作

actions = new Actions(this._driver);
actions.MoveToElement(element);
actions.KeyDown(Keys.Control).SendKeys("a").KeyUp(Keys.Control).Build().Perform();
actions.SendKeys(Keys.Backspace).Build().Perform();
actions.SendKeys("new input").SendKeys(Keys.Tab).Build().Perform();

看起来这两个代码是一样的,但它们有不同的行为,如果有人能帮你指出为什么它们有不同的行为,真的很感激吗?

如果你在使用动作。Sendkeys方法,那么修改键(如ctrl、shift等)不会被释放。这就是为什么在第一个代码中

actions.SendKeys(Keys.Control + 'a').Build().Perform(); /// send ctrl keys & holds it

actions.SendKeys(Keys.Backspace).Build().Perform(); //performs control+backspace which does nothing

如果使用Actions.Sendkeys方法,则不会释放修改键(如ctrl、shift等)。这就是为什么在第一段代码中

actions.SendKeys(Keys.Control + 'a').Build().Perform(); /// send ctrl keys & holds it

actions.SendKeys(Keys.Backspace).Build().Perform(); //performs control+backspace which does nothing

我认为
SendKeys
方法适用于Ctrl、Alt、Shift以外的键,因此对于Ctrl,您可能需要使用
KeyDown
@vmachan,这可能是原因,但当我仅尝试操作时。SendKeys(keys.Control+'a').Build().Perform();驱动程序可以选择所有文本,其行为类似于Control+A,我相信SendKeys可以用于键。Control。我认为
SendKeys
方法适用于除Ctrl、Alt、Shift以外的键,因此对于Ctrl,您可能需要使用
KeyDown
@vmachan这就是原因,但当我只尝试操作时。SendKeys(Keys.Control+'a').Build().Perform();驱动程序能够选择所有文本,其行为类似于Control+a,我相信SendKeys能够为Keys.Control工作。