15

Chrome ドライバーを使用した Selenium sendkey は、文字 "2" と "4" を削除します。他のキャラはOKです。他のブラウザ(IEまたはFF)を使用すると、すべて問題ありません。

コード:

WebElement name = driver.findElement(localizator);
name.clear();
name.sendKeys("1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ");

結果: 入力ボックスは次のように入力されます

13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ

2との文字4が欠落しており、その他の文字は正しく入力されています。

Windows 7 64bit、Chrome バージョン 29.0.1547.57 m、ChromeDriver win32 (v2.2.215849.dyu) - 最新のものを使用しています。

4

5 に答える 5

8

あなたがチェコ共和国出身であることを調査したところ、あなたのキーボードはデフォルトでチェコ語に設定されているのではないかと思い込んでいます。

sendKeys私のシステムがチェコ語のキーボードをデフォルトのものとして持っていたとき、私はまたいくつかの奇妙な問題を抱えていました。デフォルトを英語に変更したので、問題はなくなりました。

これで問題が解決しない場合は、これを試した場合に何が起こるかについての情報を提供してください:

  name.sendKeys("2");
  name.sendKeys("22222222");
  name.sendKeys("4");
  name.sendKeys("44444444");
  name.sendKeys("424242");
于 2013-08-28T14:43:29.457 に答える
7

これは古い質問ですが、まだ有効です。Chrome ドライバー v2.53 を使用しています。

キーが 1 つずつブラウザに送信されているようです (個別の keyDown イベントのように)。発生が速すぎると、次の 2 つの結果のいずれかが観察可能になります。

  • 文字がずれる
  • 文字がありません

私の解決策は次のとおりです。

protected void sendKeys(final WebElement element, final String keys) {
    for (int i = 0; i < keys.length(); i++){
        element.sendKeys(Character.toString(keys.charAt(i)));
        waitUntil(attributeContains(element, "value", keys.substring(0, i)));
    }
}

信頼性が高く、十分に高速に動作します。さらに、キーを送信する前に入力フィールドをクリアしたい場合、同じイベント シフトが発生する可能性があります。

element.clear();
element.sendKeys("abc");

クリア操作は、次の 4 つの場所のいずれかで発生する可能性があります。

  • 「あ」の手紙を送る前に
  • 文字「b」を送る前に
  • 文字「c」を送る前に
  • 文字「c」を送った後

実行したばかりの操作が正常に完了したかどうかを常に確認することをお勧めします。たとえば、入力フィールドをクリアしたい場合は、次のことをお勧めします。

  1. 入力フィールドの値を確認してください
  2. 値が空の文字列の場合は戻ります
  3. 値が空の文字列でない場合は、clear()関数を呼び出し、値が空の文字列と等しくなるまで待ちます

単純なタスクを実行するのは多くの操作です。ただし、テストはより安定します。

于 2017-04-25T16:23:28.047 に答える