如何强制 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 上的硬件静音开关?