4

WinXP32でSelenium 2.28とIE8を使用しています。次のキーボード コマンドを Web ページに送信できるようにする必要があります。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();

私が望むものを達成する方法について何か提案はありますか?

4

3 に答える 3

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 を使用してそれを行うことを好みますが、それが可能になるまではこの回避策で十分です。

于 2013-01-23T17:00:25.773 に答える
1

デフォルトのオプションを持つ現在のドライバー (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 乗算キーを送信しますか?
于 2015-04-28T16:06:27.297 に答える