2015-11-10 51 views
2

交互「我有一個關於文本框的問題,我似乎無法讓硒單擊並輸入文本。這是一個網站的密碼框。用戶名部分很好,但無論什麼原因,我不能發送文本到密碼框。我收到錯誤消息「元素當前不可見,因此可能不會與之交互」c#Selenium Webdriver - 元素隱藏 - 「元素當前不可見,因此可能不會與」

我已經嘗試了幾種不同的方法來定位文本框,如XPath名稱,包含,ID等,但似乎沒有任何工作。有任何想法嗎?我也試過等待和等待。此外,我已經返回所有的元素名稱「tbPassword」,看是否存在衝突,它只是返回1

這裏是我的代碼:

driver.Navigate()GoToUrl(「http://www.paddypower.com/bet」)。

 IWebElement clickUsername = driver.FindElement(By.XPath("//input[@name='tbUsername']")); 
     clickUsername.Click(); 
     clickUsername.SendKeys("MyUsername"); 


     IWebElement clickPassword = driver.FindElement(By.XPath("//input[@name='tbPassword']")); 
     clickPassword.Click(); 
     clickPassword.SendKeys("Mypassword"); 
+0

在黑暗中拍攝,但:複製你擁有的用戶名,然後當你寫密碼時,用星號或任何你喜歡的符號隱藏它,這是問題所在。 –

回答

2

有一個重複的密碼input,實際上是明顯的:

<div class="inputbg"> 
    THIS IS VISIBLE => <input id="dummypassword" class="input" type="text" onfocus="this.style.display='none';document.getElementById('pw').style.display='inline';document.getElementById('pw').focus()" value="Password" tabindex="2" name="dummypassword"> 
    THIS IS INVISIBLE => <input id="pw" class="input" type="password" onblur="if(this.value==''){this.style.display='none';document.getElementById('dummypassword').style.display='inline'}" onkeypress="if (event.keyCode==13)fmLogin.submit();" value="" style="display: none;" tabindex="2" name="tbPassword" autocomplete="off"> 
</div> 

單擊可見的「虛擬」輸入後,它變得不可見和「tbPassword」輸入變得可見代替。這樣的行爲在你的代碼:

IWebElement clickPassword = driver.FindElement(By.Id("dummypassword")); 
clickPassword.Click(); 

IWebElement realPasswordInput = driver.FindElement(By.XPath("//input[@name='tbPassword']")); 
realPasswordInput.SendKeys("Mypassword"); 
+0

謝謝alecxe!這工作完美,我不知道我錯過了那個虛擬密碼。對於有類似問題的其他人,您可以看到當您單擊密碼textboxt並檢查它時,它會選擇一個虛擬密碼元素,但是當您開始鍵入它時,會選擇tbPassword元素。再次感謝! – agleno

0

我也面臨着同樣的問題,當我看到這個帖子就幫我找出真正的問題,但在我的情況下,沒有使用相同名稱的兩個控制「的用戶名「和」密碼「,系統在發現控件後想要使用control.SendKeys時拋出異常,因此我使用下面的代碼來解決問題。

allTextBoxes = driver.FindElements(By.Id("username")); 
     var allPasswordTextBoxes = driver.FindElements(By.Id("password")); 

     var userNameTextField = allTextBoxes.Count > 0 ? allTextBoxes[1] : allTextBoxes[0]; 
     userNameTextField.SendKeys("myUsername"); 

     var passwordTextField = allPasswordTextBoxes.Count > 0 ? allPasswordTextBoxes[1] : allPasswordTextBoxes[0]; 
     passwordTextField.SendKeys("myPassword"); 
相關問題