我正在使用Selenium 2.28& WinXP32上的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();
关于如何实现我想要的任何建议?
答案 0 :(得分:2)
我不得不求助于使用机器人为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,但这种解决方法就足够了,直到可能。
答案 1 :(得分:1)
具有默认选项的当前驱动程序(2.45)使用PostMessage,这对于模拟修饰键[1] [2]是不可靠的。如果将IE选项“RequireWindowFocus”设置为true,则驱动程序将使用SendInput代替它,这将起作用。
如果使用C#,您可以像这样创建驱动程序:
var options = new InternetExplorerOptions();
options.RequireWindowFocus = true;
var driver = new InternetExplorerDriver(options);
答案 2 :(得分:0)
要为daw's answer重新定义Java,这是我发现将控件等密钥发送到IE的唯一方法:
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);
WebDriver driver = new InternetExplorerDriver(capabilities);
这有IEDriver接管鼠标的副作用。