【问题标题】:WebDriver - Key commands in Internet ExplorerWebDriver - Internet Explorer 中的键盘命令
【发布时间】:2016-02-03 22:23:04
【问题描述】:

我在 WinXP32 上使用 Selenium 2.28 和 IE8。我需要能够将以下键盘命令发送到我的网页:ALT + k

以下内容在 Chrome 和 Firefox17 中完美运行:

- Chrome:
Actions builder = new Actions(driver);
builder.sendKeys(Keys.ALT, "k").build().perform();

- Firefox 17 (requires extra command key for same effect):
Actions builder = new Actions(driver);
builder.sendKeys(Keys.SHIFT, Keys.ALT, "k").build().perform();


我在 IE 中尝试了以下所有方法,但均未成功:

- builder.sendKeys(Keys.ALT, "k").build().perform();
- builder.sendKeys(Keys.ALT, Keys.SHIFT, "k").build().perform();
- builder.sendKeys(Keys.chord(Keys.ALT, "k")).build().perform();
- builder.sendKeys(Keys.chord(Keys.SHIFT, Keys.ALT, "k")).build().perform();
- builder.keyDown(Keys.ALT).sendKeys("k").build().perform();
- builder.keyDown(Keys.ALT).sendKeys("k").keyUp(Keys.ALT).build().perform();
- builder.keyDown(Keys.SHIFT).keyDown(Keys.ALT).sendKeys("k").build().perform();
- builder.keyDown(Keys.SHIFT).keyDown(Keys.ALT).sendKeys("k").keyUp(Keys.ALT).keyUp(Keys.SHIFT).build().perform();

关于如何实现我想要的任何建议?

【问题讨论】:

    标签: selenium webdriver


    【解决方案1】:

    我不得不求助于使用机器人来为 Internet Explorer 做这件事:

    import java.awt.Robot
    ...
    Robot robot;
    try { 
      robot = new Robot();          
      robot.keyPress(KeyEvent.VK_ALT);
      robot.keyPress(KeyEvent.VK_K);
      robot.keyRelease(KeyEvent.VK_K);
      robot.keyRelease(KeyEvent.VK_ALT);
    }catch (AWTException e) {
      e.printStackTrace();
    }
    

    我宁愿只使用 Selenium API 来做这件事,但这种解决方法就足够了,直到有可能。

    【讨论】:

    • 我遇到了同样的问题,你的机器人也帮了我。
    【解决方案2】:

    具有默认选项的当前驱动程序 (2.45) 使用 PostMessage,这对于模拟修饰键 [1] [2] 是不可靠的。如果您将 IE 选项“RequireWindowFocus”设置为 true,则驱动程序将使用 SendInput,这将起作用。

    如果使用 C#,您可以这样创建驱动程序:

    var options = new InternetExplorerOptions();
    options.RequireWindowFocus = true;
    
    var driver = new InternetExplorerDriver(options);
    
    1. http://blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx
    2. PostMessage WM_KEYDOWN send multiply keys?

    【讨论】:

      【解决方案3】:

      daw's answer 改写为Java,这是我发现将诸如Control 之类的键发送到IE 的唯一方法:

      DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
      capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);
      WebDriver driver = new InternetExplorerDriver(capabilities);
      

      这有 IEDriver 接管你的鼠标的副作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多