【问题标题】:Selenium ChromeDriver C# - How to Send Shortcut Keys To BrowserSelenium ChromeDriver C# - 如何向浏览器发送快捷键
【发布时间】:2020-09-26 12:33:23
【问题描述】:

我知道我不能在 chromedriver 中使用组合键,但可以使用 JavaScript 作为替代。下面的示例导航到 google.com 并打开一个新窗口选项卡。

IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://google.com");
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("window.open()"); // Open new browser tab like CTRL + t do

但不知道如何发送这些键盘组合...

CTRL + SHIFT + i
CTRL + SHIFT + m

【问题讨论】:

    标签: c# .net selenium automated-tests selenium-chromedriver


    【解决方案1】:

    由于您可以使用 .ExceuteScript 运行任意 JavaScript,因此您可以使用 JavaScript 解决方案将按键发送到网页:Is it possible to simulate key press events programmatically?

    这仅适用于网页本身处理的快捷方式。由于您提供的快照示例实际上是浏览器快捷方式,因此 JavaScript 解决方案将不起作用。

    相反,您必须将键盘按下直接发送到 Web 浏览器。这取决于操作系统,但在 Windows 下,您可以使用 SendMessage 将键盘按下发送到另一个进程:Sending keyboard key to browser in C# using sendkey function

    编辑:上面的方法很难发送涉及 Shift/Control 的快捷方式。 Windows下时SendKeys(more info about the syntax)可以用来发送key到当前前台窗口:

    // reference System.Windows.Forms
    SendKeys.SendWait ("^+{i}"); // CTRL + SHIFT + I
    Thread.Sleep (500);
    SendKeys.SendWait ("^+{m}"); // CTRL + SHIFT + M
    

    【讨论】:

    • 感谢演员...因此,鉴于该帖子中显示的 ChromeWrapper 类,这是否是一个接一个地发送 2 个键组合的正确方法? CTRL + SHIFT + iCTRL + SHIFT + m ChromeWrapper chrome = new ChromeWrapper(@"https://stackoverflow.com"); Thread.Sleep(300); // CTRL + SHIFT + i chrome.SendKey((char)17); // ctrl chrome.SendKey((char)16); // shift chrome.SendKey((char)73); // I CTRL + SHIFT + m chrome.SendKey((char)17); // ctrl chrome.SendKey((char)16); // shift chrome.SendKey((char)77); // M
    • 另外,这个 ChromeWrapper 类与 Selenium Chrome Driver 类有什么关系?我想将这 2 个组合键发送到 Chrome 驱动程序窗口。
    • @GRF 我已经更新了我的答案以包含一个更简单的解决方案,可以将密钥发送到当前前台窗口。
    • 再次感谢。效果很好。必须添加 10 秒的睡眠时间,以便窗口有时间做出反应。
    猜你喜欢
    • 2017-06-13
    • 2017-05-07
    • 2019-02-11
    • 2014-03-21
    • 2010-12-31
    • 2014-06-22
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多