10

Chromeドライバを使用したSelenium sendkeysが文字「2」と「4」を削除します。他の文字はOKです。他のブラウザ(IEまたはFF)を使用すると、すべてがOKです。Selenium sendkeysがChromeドライバで文字を削除する

コード:

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

結果:入力ボックスが表示されません

13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 

文字24で満たされ、他の文字が正しく入力されます。

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

+1

多くの 'sendKeys'呼び出しでStringを送信しようとしましたか?違いはありますか? – LaurentG

+0

http://stackoverflow.com/questions/18013821/pythons-selenium-send-keys-with-chrome-driver-drops-characters –

答えて

7

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

私のシステムにチェコ語のキーボードがデフォルトのものとしてある場合、私はsendKeysといくつかの奇妙な問題もありました。私はデフォルトを英語に変更して以来、問題は解消されました。

これが解決しない場合は、あなたがこれをしようとした場合に発生する何が起こっているかの情報を提供してください:

name.sendKeys("2"); 
    name.sendKeys("22222222"); 
    name.sendKeys("4"); 
    name.sendKeys("44444444"); 
    name.sendKeys("424242"); 
+0

ロシア語のキーボードでも同じ問題が発生しました。問題はhttps:// codeです。 google.com/p/chromedriver/issues/detail?id=521 – pil0t

2

を私はVNCを使用してVMに接続するときにもこの問題を経験して、Seleniumテストをそのように実行しています。

VNCは実際には文字をドロップするものでした。 VirtualBoxコンソールを使ってVMへの直接接続に移動したら、うまくいきました。

1

これは古い質問ですが、依然として有効です。私はChrome Driver v2.53を使用しています。

キーが別のkeyDownイベントのようにブラウザに1つずつ送信されているようです。それはその後、あまりにも速く起こると二つの結果の一つは、観察することができ:

  • 文字がシフトされ
  • 文字が

が欠落している次のように私のソリューションです:

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))); 
    } 
} 

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

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

クリア動作は、4つの場所のいずれかで発生する可能性があります:「B」の文字

  • を送信する前に文字「」
  • を送信する前に

    • 文字「c」を送信する前に
    • を送信した後に

    私は例えば、私たちは実行しました操作が正常に行われている場合は、必ずチェックすることをお勧めします:我々は、入力フィールドをクリアしたいときには良い練習ですへ:

    1. 入力フィールド
    2. の値をチェック
    3. 値が空の文字列がある場合、値は、その後クリア()関数を呼び出すと値が空の文字列

    に等しくなりますまで、それはたくさんだ待つ空の文字列でない場合は、その後

  • を返しますオペラ単純なタスクのために実行するイオン。しかし、それはテストをより安定させるでしょう。

  • 2

    私は同じ問題がありました。正しい値が挿入されるまで、sendkeysをループ内で呼び出すことになりました。ここで私は何をしたのですか:

    WebElement name = driver.findElement(By.xpath(...)); 
    this.sendkeys(name,"yourValue"); 
    
    private void sendkeys(WebElement ele, String val) throws 
    InterruptedException 
    { ele.clear(); 
        while(true) 
        { ele.sendKeys(val); 
         if(ele.getAttribute("value").equals(val)) 
          break; 
         else 
         { ele.clear(); 
          Thread.currentThread(); 
          Thread.sleep(3000); 
         } 
        } 
    
        Thread.currentThread(); 
        Thread.sleep(3000); 
    } 
    

    希望します。