C# 如何强制Selenium忽略在其他应用程序中执行的ctrl/shift操作?

C# 如何强制Selenium忽略在其他应用程序中执行的ctrl/shift操作?,c#,selenium-webdriver,C#,Selenium Webdriver,我有一个测试,其中许多“点击链接”操作会持续几分钟。 问题在于: -在测试过程中,我多次点击不同的链接, -在后台测试运行,webdriver窗口没有焦点 -当时我使用其他应用程序(文本或代码编辑器),当我按下shift/ctrl按钮时,Webdriver会捕获它并在新窗口/选项卡中打开链接 Webdriver执行click+shift(或click+ctrl)操作确实出乎意料。我的测试因此而失败。Webdriver将窗口和选项卡相乘,并在一段时间后丢失句柄/上下文 有没有办法防止Webdriv

我有一个测试,其中许多“点击链接”操作会持续几分钟。 问题在于: -在测试过程中,我多次点击不同的链接, -在后台测试运行,webdriver窗口没有焦点 -当时我使用其他应用程序(文本或代码编辑器),当我按下shift/ctrl按钮时,Webdriver会捕获它并在新窗口/选项卡中打开链接

Webdriver执行click+shift(或click+ctrl)操作确实出乎意料。我的测试因此而失败。Webdriver将窗口和选项卡相乘,并在一段时间后丢失句柄/上下文

有没有办法防止Webdriver捕获其他应用程序中按下的ctrl/shift键

更多信息和代码示例

触发此问题的非常简单的方法。。。C#中的代码:

for(int i=0;i<20;i++)
{        
driver.Navigate().gotour(“google.com”);
driver.FindElement(By.Id(“gbqfq”)).Clear();
driver.FindElement(By.Id(“gbqfq”)).SendKeys(“今年你是淘气还是和蔼可亲”);
driver.FindElement(By.Id(“gbqfq”)).SendKeys(key.Enter);
系统.线程.线程.睡眠(500);
driver.FindElementByClassName(“r”).Click();
系统.线程.线程.睡眠(500);
}
测试运行时:

  • 打开记事本
  • 按住Shift键
  • 过了一会儿,您应该注意到Webdriver打开了一个新窗口
  • 如果按住Ctrl键,将打开新选项卡
  • 如果最小化Webdriver窗口,也会出现问题-它仍然捕获键盘操作
当您使用modifierkeys(Shift、Ctrl)时,它们不会自动释放:按键在后台保持按下状态


要解决此问题,您可以向应用程序发送Keys.Null,这将释放modifierkeys。

作为一个选项,您可以尝试使用一些虚拟显示来运行测试,其中包含受限制的key capturingtanks以供回复。我知道这个选项,但我不能在当前的特定测试中使用它。我已经添加了一个代码示例来澄清这个问题。这里没有windows,稍后再试。还有一个问题:如何初始化webdriver实例?只是标准的:IWebDriver driver=new FireFoxrDriver();没有任何技巧、设置或浏览器配置文件。
 for (int i = 0; i < 20; i++)
            {        
            driver.Navigate().GoToUrl("google.com");
            driver.FindElement(By.Id("gbqfq")).Clear();
            driver.FindElement(By.Id("gbqfq")).SendKeys("were you naughty or nice this year");
            driver.FindElement(By.Id("gbqfq")).SendKeys(Keys.Enter);
            System.Threading.Thread.Sleep(500);
            driver.FindElementByClassName("r").Click();
            System.Threading.Thread.Sleep(500);
            }