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

时间:2013-11-20 11:28:03

标签: c# selenium-webdriver

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

Webdriver意外地执​​行了单击+移位(或单击+ ctrl)操作。我的测试因此而失败。 Webdriver将窗口和选项卡相乘,并在一段时间后丢失句柄/上下文。

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

更多信息&代码示例

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

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

测试正在运行时:

  • 打开记事本
  • 按住Shift键
  • 过了一会儿你应该注意到Webdriver打开了新窗口
  • 如果按住Ctrl键,则会打开新标签页
  • 如果您最小化Webdriver窗口 - 它仍然捕获键盘操作,也会出现
  • 问题

1 个答案:

答案 0 :(得分:0)

使用modifierkeys(Shift,Ctrl)时,它们不会自动释放:键在后台保持按下状态。

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