4

私は問題を満たし、そのセレンを押すと、このリストにないキーを押したままにすることはできません -セレンを使用して非修飾キー(スペースキー)を押して保持する方法は?

Keys.SHIFT, 
Keys.CONTROL, 
Keys.ALT, 
Keys.META, 
Keys.COMMAND, 
Keys.LEFT_ALT, 
Keys.LEFT_CONTROL, 
Keys.LEFT_SHIFT 

私のアプリケーションは、スペースキーを押すとホールドされている場合にのみ指示を示しています。私はこのためのブラウザテストを書いてみたい。

私はProtractorJSを使用していますが、他のキーにkeyDownを使用しようとすると、セレンのどこにでもそのようなアクションの一般的な制限のようです - このようなメッセージで例外が発生します - "Key Down/Upイベントのみ修飾キーの感覚。私は非修飾キーを押して保持することができますどのように https://github.com/SeleniumHQ/selenium/blob/master/javascript/webdriver/actionsequence.js#L301

:セレンjsのコードで https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/interactions/internal/SingleKeyAction.java#L48

と同じチェック:ここ

は、SeleniumのJavaコードへのリンクですか?私の場合はスペースキー。

更新日: Florent B. answerに感謝します。 少し修正した後、完全に動作します。フレームへの切り替えを追加し、私の場合には特定の要素の代わりにイベントをドキュメントにディスパッチしなければなりませんでした。

browser.switchTo().frame('workspace'); 
const SIMULATE_KEY = 
"var e = new Event('keydown');" + 
"e.keyCode = 32;" + //spacebar keycode 
"e.which = e.keyCode;" + 
"e.altKey = false;" + 
"e.ctrlKey = false;" + 
"e.shiftKey = false;" + 
"e.metaKey = false;" + 
"e.bubbles = true;" + 
"document.dispatchEvent(e);"; 
browser.executeScript(SIMULATE_KEY); 
+0

興味深い - スペックの私の読書(https://w3c.github.io/webdriver/webdriver-spec.html #keyboard-actions)は現在の動作を強く正当化していないようです。 –

答えて

2

Selenium APIはこの機能を提供しません。修飾子を必要とせずにキーボードの上に表示されます 各キーは、キーアップが続くのKeyDownとして送信されます。公式ドキュメントから次のように

https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol

サーバーは、キーシーケンスを処理しなければなりません。

は、JavaScriptの切れ端でキーイベントをシミュレートすることができしかし:

const SIMULATE_KEY = 
    "var e = new Event(arguments[0]);" + 
    "e.key = arguments[1];" + 
    "e.keyCode = e.key.charCodeAt(0);" + 
    "e.which = e.keyCode;" + 
    "e.altKey = false;" + 
    "e.ctrlKey = false;" + 
    "e.shiftKey = false;" + 
    "e.metaKey = false;" + 
    "e.bubbles = true;" + 
    "arguments[2].dispatchEvent(e);"; 

var target = driver.findElement(By.Id("...")); 

// press the key "a" 
browser.executeScript(SIMULATE_KEY, "keydown", "a", target); 

// release the key "a" 
browser.executeScript(SIMULATE_KEY, "keyup", "a", target); 
0

あなたはセレンを使用して答えを見つけることができない場合は、別のツール(例えばAutoItまたはAutoHotKeyなど)だけでキーを押してやると保持すると、スクリプトをトリガすることができます。

それはお尻の痛みだが、それはあなたの唯一の選択肢かもしれません。

関連する問題