2016-07-29 50 views
1

我正嘗試使用量角器w/Selenium(C#)自動登錄到我們的應用程序。我知道這樣做的正確方法是這樣的:發送密鑰無法在登錄容器上工作

_ngDriver.FindElement(By.Id(inputTextId)); 
_ngDriver.FindElement(By.Id(inputTextId)).Clear(); 
_ngDriver.FindElement(By.Id(inputTextId)).SendKeys(inputText); 

我的問題是,我的代碼發現在第一行的元素,但隨後爆發的時候我嘗試做任何清除()或的SendKeys()給我這個錯誤:

unknown error: cannot focus element 

(Session info: chrome=51.0.2704.103) 
    (Driver info: chromedriver=2.22.397933 (1cab651507b88dec79b2b2a22d1943c01833cc1b),platform=Windows NT 6.1.7601 SP1 x86_64) 

還有一件事。當我放置一個Click()而不是一個ClearSendKeys它的作品,所以我知道我正在尋找正確的框架。有沒有人處理過類似的東西,並知道解決辦法?

回答

2

cannot focus element錯誤通常,當您嘗試發送鍵或出具非輸入元素上一個clear()方法發生。檢查您的inputTextId id定位符是否與input元素匹配。

此外,請查看是否只有具有此ID的所需元素。

+0

謝謝!頁面上隱藏了一個與我嘗試輸入的內容幾乎相同的元素。我最終在我的發送密鑰方法中使用了Class和Id。 –

0

可以請嘗試以下方法:

_ngDriver.FindElement(By.Id(inputTextId)); 
_ngDriver.FindElement(By.Id(inputTextId)).SendKeys(Keys.TAB); 
_ngDriver.FindElement(By.Id(inputTextId)).Clear(); 
_ngDriver.FindElement(By.Id(inputTextId)).SendKeys(inputText); 

OR:

_ngDriver.FindElement(By.Id(inputTextId)); 
_ngDriver.FindElement(By.Id(inputTextId)).SendKeys(Keys.TAB); 
_ngDriver.FindElement(By.Id(inputTextId)).SendKeys(inputText); 
1

作爲例外清楚地說,在輸入值之前textbax需要關注並且您可以使用Click()這樣做,這是絕對正確的。還有一件事,你可以直接從SendKeys嘗試重點爲:

_ngDriver.FindElement(By.Id(inputTextId)).SendKeys(Keys.ENTER, inputText); 

注意: - 我建議,如果你正在做同一頁面上的元素一些動作,總是習慣來存儲元素變成一個變量引用,而不是一次又一次地找到元素並做出必要的操作。

希望它有幫助... :)