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

Posted

技术标签:

【中文标题】如何强制 Selenium 忽略其他应用程序中的 ctrl/shift 操作?【英文标题】:How to force Selenium to ignore ctrl/shift actions made in other application? 【发布时间】:2013-11-20 11:28:03 【问题描述】:

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

Webdriver 执行 click+shift(或 click+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 窗口,也会出现问题 - 它仍会捕获键盘操作

【问题讨论】:

作为一个选项,您可以尝试使用一些带有限制键捕获的虚拟显示器来运行测试 感谢您的回复。我知道这个选项,但我无法在当前的特定测试中使用它。 我添加了一个代码示例来澄清这个问题。 这里没有windows,以后试试。还有一个问题:如何初始化 webdriver 实例? 只是标准:IWebDriver driver = new FireFoxrDriver();没有任何技巧、设置或浏览器配置文件。 【参考方案1】:

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

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

【讨论】:

以上是关于如何强制 Selenium 忽略其他应用程序中的 ctrl/shift 操作?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 将 Google Cloud Storage 中的数据加载到 BigQuery 时,如何强制忽略双引号?

如何强制 ListView 忽略单击/不突出显示单击的项目?

强制编译器忽略程序中的某些行

如何强制 WKWebView 忽略 iOS 上的硬件静音开关?

如何告诉 OkHttpClient 忽略缓存并从服务器强制刷新?

如果通过,如何强制 Mongoose 忽略 __v?