Vb.net Selenium在页面上找不到元素

Vb.net Selenium在页面上找不到元素,vb.net,selenium,Vb.net,Selenium,我正在使用Selenium测试一个vb.net站点,但当我单击BTN匹配时,页面会发生更改,并且由于某些原因,Selenium似乎没有更新源代码,因为我遇到以下错误 错误 An unhandled exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll Additional information: Unable to locate element: #chkTermsAccept

我正在使用Selenium测试一个vb.net站点,但当我单击BTN匹配时,页面会发生更改,并且由于某些原因,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()

感谢您对此问题提供的帮助。

不要使用thread.sleep,而是使用类似的函数等待元素出现,您可以设置等待时间,如果仍然找不到,则会出现超时异常错误

    public IWebElement WaitElement(IWebDriver driver, String element)
    {
        IWebElement WebElement;
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); //can be changed
        return WebElement = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath(element)));
    }
您可以这样调用它,它将给它时间来搜索元素

WaitElement(driver, elementXpath).click();
WaitElement(driver, elementXpath).SendKeys(text);
还是你的情况

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

放置一些明确的等待查找元素。不要在接受的答案中编辑您的问题编辑。。。这破坏了问题的价值。如果人们想查看答案,他们可以查看下面接受的答案。我已经做了您提到的更改,但它仍然在同一行上崩溃,只是这一次我收到此错误,因为代码更新在WebDriver.Support.dll中发生了“OpenQA.Selenium.WebDriverTimeoutException”类型的未处理异常。其他信息:Timed25秒后离开意味着它找不到元素,你确定路径是正确的吗?只需重新检查xpath和ID就可以了,因为某种原因,当我在某个url上或我最初导航到的url上时,它可以工作,但当它通过自然方式通过站点时,url从类似的变为,它找不到任何元素,当我调试时,我找到了第一个url的源代码页面不是当前页面嗯,你说的自然方式是什么意思?我指的是网站通过这些步骤和btn点击,它应该到达所需的目的地,而不是我强迫网站导航到我正在洗澡的页面。如果我强制它导航到第二个url,在那里我遇到了麻烦,它首先会找到元素(例如Mysite.development.ie/customer/1),只有当url更改时,它才能找到元素。