2017-07-18 123 views
1

我使用Selenium來測試vb.net網站,但是當我點擊btnNoMatch頁面發生變化,出於某種原因,Selenium似乎沒有更新源代碼,因爲我得到了下面的內容錯誤。Selenium找不到元素頁面

的錯誤

An unhandled exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll 

Additional information: Unable to locate element: #chkTermsAccept 

我一直在使用睡眠嘗試,刷新和導航,但沒有運氣。如果我避免btnNoMatch點擊並直接導航到頁面,那麼它能夠找到頁面上的元素,但我無法做到這一點,因爲在單擊btnNoMatch後,信息將填充到文本框中。

守則

driver.Navigate().GoToUrl("http://Mysite.development.ie/") 

     Dim element As IWebElement = driver.FindElement(By.Id("LoginUsername")) 
     element.SendKeys("UserName") 

     Dim element1 As IWebElement = driver.FindElement(By.Id("LoginPassword")) 
     element1.SendKeys("Password") 

     Dim element2 As IWebElement = driver.FindElement(By.Id("LoginBtn")) 
     element2.Click() 
     System.Threading.Thread.Sleep(5000) 
     Dim element3 As IWebElement = driver.FindElement(By.Id("CustomerId")) 
     element3.SendKeys("1") 
     'Wait Time 
     System.Threading.Thread.Sleep(7000) 
     Dim element4 As IWebElement = driver.FindElement(By.CssSelector(".ClickCustomer")) 
     element4.Click() 

     Dim element5 As IWebElement = driver.FindElement(By.Id("cbxNoMobileNo")) 
     element5.Click() 
     Dim element6 As IWebElement = driver.FindElement(By.Id("btnNoNumberConfirm")) 
     element6.Click() 
driver.FindElement(By.Id("btnNoMatch")) 
      element9.Click() 

     'System.Threading.Thread.Sleep(4000) 
     'driver.Navigate().Refresh() 
     'driver.Url = "http://Mysite.development.ie/Customer/1" 
     'System.Threading.Thread.Sleep(4000) 
     'driver.Manage().Window.Maximize() 
     ''Dim wait As WebDriverWait = New WebDriverWait(driver, 4000) 
     'wait.Until(ExpectedConditions.visibilityOfElementLocated((By.Id("id")))) 

     Dim element10 As IWebElement = driver.FindElement(By.Id("chkTermsAccept")) 
     element10.Click() 

     Dim element12 As IWebElement = driver.FindElement(By.Name("txtName")) 
     element12.SendKeys("John") 

      System.Threading.Thread.Sleep(14000) 
     driver.Dispose() 

感謝這個問題的任何幫助。

+0

把一些明確的恨不得找個元素。 –

+0

不要在接受的答案中編輯您的問題編輯......這會破壞問題的價值。如果人們想看到答案,他們可以看看下面接受的答案。 – JeffC

回答

1

而不是使用thread.sleep使用像這樣的函數來等待元素可見,您可以設置等待的時間,如果仍然沒有找到它會通過超時異常錯誤。

​​

你可以這樣稱呼它,它會給它時間來搜索元素。

WaitElement(driver, elementXpath).click(); 
WaitElement(driver, elementXpath).SendKeys(text); 

或在您的情況

Dim element10 As IWebElement = WaitElement(driver, "//*[@id= 'chkTermsAccept']"); 
    element10.Click(); 
+0

我已經提出了你提到的改變,但它仍然在同一行上崩潰,只是這次我得到這個錯誤,由於代碼更新在WebDriver.Support.dll 發生類型'OpenQA.Selenium.WebDriverTimeoutException'類型的未處理的異常其他信息:25秒後超時 – John

+0

好吧,這意味着它無法找到元素,你確定路徑是正確的嗎? – redp

+0

只是重新檢查那裏嘗試了xpath和由於某種原因,它在我在http://Mysite.development.ie/時有效,或者我曾導航到最初的URL,但是當它通過自然方式瀏覽網站時並且url從http://Mysite.development.ie/變成http://Mysite.development.ie/customer/1它找不到任何元素,當我調試時,我發現第一個的源代碼頁面http://Mysite.development.ie/而不是當前頁面 – John