2017-07-18 127 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