2013-11-28 38 views
3

我使用(new Actions(driver).sendKeys(String).perform()向webdriver發送輸入。但是,我一直得到不一致的結果。有時候String會被完美地發送出去,有時會丟失一個或另一個字母,即使字符串本身只有幾個字符長度。Sendkeys不一致地丟棄字母

我甚至嘗試每次發送字符串一個字符(使用for循環),我仍然得到相同的不一致的行爲 - 它比以前減少鍵,但仍然不是100%準確。

這可能是什麼原因,以及如何解決這個問題?

我使用Chromedriver,Java/JUnit和鍵盤佈局設置爲美國。

+0

我從來沒有見過這樣的事......你嘗試過不同的機器上相同的代碼(也許在計算機上的一些進程的一些干擾? ) –

+0

有幾次 - 它似乎工作正常,但它並不總是在我的機器上失敗,所以我不能100%確定它是否只是我的機器上的東西。但是,如果是這樣的話,哪種程序會有這種干擾? – Shisa

+0

這很奇怪,你可以使用FirefoxDriver重現嗎?你可以嘗試一些不同的鍵盤佈局(EN)?你使用什麼版本的驅動程序?另外,看看這裏:https://code.google.com/p/chromedriver/issues/detail?id=405 –

回答

0

我仍然不清楚究竟是什麼導致了這一點 - 我看到不一致的失敗發送所有的密鑰到一些extjs組件。我不確定這是否是一件奇怪的事情,或者硒有點片面。我們在做字符串或調用發送鍵時沒有做任何奇怪的事情(除了額外的等待檢查元素被啓用並顯示),雖然它不像我們的代碼中的東西。

我的解決方案是重複發送密鑰,直到它們明顯粘住。我裹着硒API的一些原因所以WebElements所有的調用都是通過一個叫WrappedElement類具有發送鍵的方法進行連接:

public void SendKeys(string text) 
    { 
     Func<string> errorMessage =() => string.Format("couldn't send keys {0} entered either {1} or {2}", text, Text, Value); 

     Action actionToTry =() => 
           { 
            _element.Clear(); 
            RawSendKeys(text); 
           }; 

     Wait.RepeatedlyTry(actionToTry,() => Text == text || Value == text, errorMessage); 
    } 

    public void RawSendKeys(string text) 
    { 
     _element.SendKeys(text); 
    } 

wait方法的簡化版本是這樣的:

public void RepeatedlyTry(Action actionToTry, Func<bool> completed, Func<string> errorMessage) 
    { 
     Wait.Until(d => 
        { 
         actionToTry(); 
         return completed(); 
        }); 
    } 

凡直到剛剛呼叫,直到上配置DefaultWait